Strace, bir işlemin yaptığı sistem çağrılarını ve bu sistem çağrılarının döndürdüklerini görmenizi sağlar.
strace oluşturma
strace'i oluşturmak için aşağıdaki komutu çalıştırın:
mmma -j6 external/strace
Çalışan bir işleme ekleme
strace'in en basit ve en yaygın kullanım alanı, onu çalışan bir işleme eklemektir. Bunu şu komutla yapabilirsiniz:
adb shell strace -f -p PID
-f
işareti, strace'e süreçteki tüm iş parçacıklarının yanı sıra daha sonra oluşturulan tüm yeni iş parçacıklarına bağlanmasını söyler.
Tipik bir işlemde ç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 kılavuz sayfasını incelemeniz gerekir.
Uygulamada kullanma
Bir uygulamada strace'i kullanmak için:
- Cihazı, strace'i çalıştırabileceğiniz şekilde ayarlayın. Aksi takdirde strace'in çalışmasını engelleyecek olan seccomp filtresini kaldırmak için root 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, uygulamanın uid'si altında çalışacağından strace günlükleri için herkese yazma izni olan bir dizin oluşturun:
adb shell mkdir -m 777 /data/local/tmp/strace
- İzlenecek işlemi 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.
Zigotta kullanma
Zygote'ta strace'i kullanmak için ilgili init.rc
zygote satırını düzeltin (adb shell setenforce 0
gerekir):
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 başlatma sırasında strace günlüklerini alma
Android başlatma sırasında strace günlüklerini almak için aşağıdaki değişiklikleri yapın:
- İşlem adı
zygote
olarak değiştiğinden,strace
için SELinuxfile_context
eksik olduğu için belirtilen hizmet başlatılamayabilir.strace
Çözüm olarak,system/sepolicy/private/file_contexts
içinde strace için yeni bir satır ekleyin ve orijinal dosya bağlamını kopyalayın. Örnek:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- Çekirdek veya bootconfig parametresi ekleyin, ardından cihazı SELinux izinli modunda başlatın. Bunu, Android 12'de çekirdek sürümü 5.10 veya daha yeni olan cihazlarda
androidboot.selinux=permissive
öğesiniBOARD_KERNEL_CMDLINE
ya daBOARD_BOOTCONFIG
öğesine ekleyerek yapabilirsiniz. (Bu değişkenbuild/core/Makefile
içinde salt okunur hale gelir ancak her zaman/device/*/BoardConfig
altında kullanılabilir.)
/device/google/marlin/sailfish/BoardConfig.mk
içindeki Pixel (sailfish) cihazı için örnek: Değişikliği yaptıktan sonra başlatma görüntüsünü oluşturup cihaza yükleyin. Cihaz, izinli modda başlatılır.- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive