Strace, sistemin bir süreç çağrılarını yaptığını ve bu sistem çağrılarının geri dönüşünü görmenizi sağlar.
Bina katmanı
Strace oluşturmak için aşağıdakileri çalıştırın:
mmma -j6 external/strace
Çalışan bir sürece bağlanma
Strace'in en basit ve en yaygın kullanım durumu, onu aşağıdakilerle yapabileceğiniz çalışan bir işleme eklemektir:
adb shell strace -f -p PID
-f
bayrağı strace'e süreçteki tüm iş parçacıklarına ve daha sonra ortaya çıkan yeni iş parçacıklarına eklenmesini söyler.
Tipik bir süreçte çok sayıda sistem çağrısı yapılır, bu nedenle yalnızca gerçekten ilgilendiğiniz verileri nasıl toplayacağınızı öğrenmek için strace man sayfasını incelemek isteyeceksiniz.
Bir uygulamada kullanma
Bir uygulamada strace kullanmak için:
- Cihazı strace'i çalıştırabilecek şekilde ayarlayın. Strace'in çalışmasını engelleyecek seccomp filtresini kaldırmak için kök olmanız, SELinux'u devre dışı bırakmanız ve çalışma zamanını yeniden başlatmanız gerekir:
adb root
adb shell setenforce 0
adb shell stop
adb shell start
- strace günlükleri için herkes tarafından yazılabilir bir dizin oluşturun, çünkü strace uygulamanın kullanıcı kimliği altında çalışacaktır:
adb shell mkdir -m 777 /data/local/tmp/strace
- İzlenecek süreci seçin ve başlatın:
adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
- İşlemi normal şekilde başlatın.
Zigot üzerinde kullanma
Zigotta strace kullanmak için ilgili init.rc
zigot satırını düzeltin ( adb shell setenforce 0
gerektirir):
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
Android önyüklemesi sırasında strace günlükleri alınıyor
Android önyüklemesi sırasında strace günlüklerini almak için aşağıdaki değişiklikleri yapın:
- İşlem adı
zygote
strace
değiştiğinden, verilen hizmetstrace
için eksik SELinuxfile_context
nedeniyle başlatılamayabilir. Çözüm,system/sepolicy/private/file_contexts
dosyasına strace için yeni bir satır eklemek ve orijinal dosya içeriğini kopyalamaktır. Örnek:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- Kernel veya bootconfig parametresini ekleyin, ardından cihazı SELinux izinli modunda önyükleyin.
androidboot.selinux=permissive
öğesiniBOARD_KERNEL_CMDLINE
öğesine veya Android 12'de çekirdek sürümü 5.10 veya üzeri olanBOARD_BOOTCONFIG
öğesine ekleyerek bunu yapabilirsiniz. (Bu değişkenbuild/core/Makefile
dosyasında salt okunur hale gelir ancak her zaman/device/*/BoardConfig
altında bulunur.)
/device/google/marlin/sailfish/BoardConfig.mk
Pixel (yelken balığı) cihazı örneği:- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive
Değişikliği yaptıktan sonra, önyükleme görüntüsünü oluşturup flaşlayın; cihaz izin verilen modda önyüklenecektir.