Strace memungkinkan Anda melihat panggilan sistem yang dibuat proses dan apa yang ditampilkan panggilan sistem tersebut.
Mem-build strace
Untuk mem-build strace, jalankan perintah berikut:
mmma -j6 external/strace
Memasang ke proses yang sedang berjalan
Kasus penggunaan yang paling sederhana dan paling umum untuk strace adalah melampirkan strace ke proses yang sedang berjalan, yang dapat Anda lakukan dengan:
adb shell strace -f -p PID
Flag -f
memberi tahu strace untuk melampirkan ke semua thread dalam
proses, ditambah thread baru yang dibuat nanti.
Proses standar membuat banyak panggilan sistem, jadi sebaiknya Anda meninjau halaman man strace untuk mempelajari cara mengumpulkan hanya data yang benar-benar Anda minati.
Menggunakan di aplikasi
Untuk menggunakan strace di aplikasi:
- Siapkan perangkat agar Anda dapat menjalankan strace. Anda harus memiliki hak akses root, menonaktifkan SELinux, dan memulai ulang
runtime untuk menghapus filter seccomp yang akan mencegah strace berjalan:
adb root
adb shell setenforce 0
adb shell stop
adb shell start
- Siapkan direktori yang dapat ditulis oleh semua orang untuk log strace, karena strace akan berjalan di bawah
uid aplikasi:
adb shell mkdir -m 777 /data/local/tmp/strace
- Pilih proses untuk melacak dan meluncurkannya:
adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
- Meluncurkan proses seperti biasa.
Penggunaan di zygote
Untuk menggunakan strace di zygote, perbaiki baris zygote init.rc
yang relevan (memerlukan adb shell setenforce 0
):
cd system/core/
patch -p1 <<EOF --- a/rootdir/init.zygote32.rc +++ b/rootdir/init.zygote32.rc @@ -1,4 +1,4 @@ -service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server +service zygote /system/bin/strace -o /data/local/tmp/zygote.strace /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class main socket zygote stream 660 root system onrestart write /sys/android_power/request_state wake EOF
Mendapatkan log strace selama booting Android
Untuk mendapatkan log strace selama booting Android, lakukan perubahan berikut:
- Karena nama proses berubah dari
zygote
menjadistrace
, layanan yang diberikan mungkin gagal dimulai karena tidak ada SELinuxfile_context
untukstrace
. Solusinya adalah menambahkan baris baru untuk strace disystem/sepolicy/private/file_contexts
dan menyalin konteks file asli. Contoh:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- Tambahkan parameter kernel atau bootconfig, lalu booting perangkat dalam mode permisif SELinux. Anda dapat
melakukannya dengan menambahkan
androidboot.selinux=permissive
keBOARD_KERNEL_CMDLINE
, atau keBOARD_BOOTCONFIG
di Android 12 dengan kernel versi 5.10 atau yang lebih baru. (Variabel ini menjadi hanya baca dibuild/core/Makefile
, tetapi selalu tersedia di bagian/device/*/BoardConfig
.)
Contoh untuk perangkat Pixel (sailfish) di/device/google/marlin/sailfish/BoardConfig.mk
: Setelah melakukan perubahan, build dan flash image booting dan perangkat akan melakukan booting dalam mode permisif.- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive