Strace memungkinkan Anda melihat panggilan sistem yang dilakukan suatu proses dan apa yang dikembalikan oleh panggilan sistem tersebut.
Membangun jejak
Untuk membangun strace, jalankan perintah berikut:
mmma -j6 external/strace
Melampirkan ke proses yang sedang berjalan
Kasus penggunaan strace yang paling sederhana dan paling umum adalah melampirkannya ke proses yang sedang berjalan, yang dapat Anda lakukan dengan:
adb shell strace -f -p PID
Bendera -f
memberitahu strace untuk melampirkan ke semua thread dalam proses, ditambah thread baru yang muncul kemudian.
Proses yang umum membuat banyak panggilan sistem, jadi sebaiknya Anda meninjau halaman manual strace untuk mempelajari cara mengumpulkan hanya data yang benar-benar Anda minati.
Menggunakan pada suatu aplikasi
Untuk menggunakan strace pada suatu aplikasi:
- Siapkan perangkat agar Anda dapat menjalankan strace. Anda harus menjadi 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 dunia untuk log strace, karena strace akan berjalan di bawah uid aplikasi:
adb shell mkdir -m 777 /data/local/tmp/strace
- Pilih proses yang akan dilacak dan luncurkan:
adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
- Luncurkan proses secara normal.
Menggunakan pada zigot
Untuk menggunakan strace pada zigot, perbaiki baris zigot 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 saat boot Android
Untuk mendapatkan log strace saat boot Android, lakukan perubahan berikut:
- Karena nama proses berubah dari
zygote
menjadistrace
, layanan yang diberikan mungkin gagal untuk memulai karena 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 boot 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 lebih tinggi. (Variabel ini menjadi hanya-baca dibuild/core/Makefile
tetapi selalu tersedia di bawah/device/*/BoardConfig
.)
Contoh untuk perangkat Pixel (sailfish) di/device/google/marlin/sailfish/BoardConfig.mk
:- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive
Setelah melakukan perubahan, buat dan flash image booting dan perangkat akan melakukan booting dalam mode permisif.