Strace memungkinkan Anda melihat panggilan sistem yang dibuat proses dan apa yang ditampilkan panggilan sistem tersebut.
Bangun strace
Untuk mem-build strace, jalankan perintah berikut:
mmma -j6 external/strace
Pasang 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 dipasang ke semua thread di
{i>tool<i}, ditambah utas baru apa
pun yang muncul kemudian.
Biasanya, proses melakukan banyak panggilan sistem, jadi Anda perlu meninjau halaman manual strace untuk mempelajari cara mengumpulkan hanya data yang benar-benar Anda minati.
Gunakan di aplikasi
Untuk menggunakan strace di aplikasi:
- Siapkan perangkat agar Anda dapat menjalankan strace. Anda harus melakukan 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 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"'
- Meluncurkan proses seperti biasa.
Penggunaan di zygote
Untuk menggunakan strace di zygote, perbaiki zygote init.rc
yang relevan
baris (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 parameter SELinuxfile_context
untukstrace
. Solusinya adalah menambahkan baris baru untuk strace disystem/sepolicy/private/file_contexts
dan salin 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 versi kernel 5.10 atau yang lebih baru. (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
: 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