Strace'i kullanma

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:

  1. 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
    
  2. 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
    
  3. İ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"'
    
  4. İş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 hizmet strace için eksik SELinux file_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 öğesini BOARD_KERNEL_CMDLINE öğesine veya Android 12'de çekirdek sürümü 5.10 veya üzeri olan BOARD_BOOTCONFIG öğesine ekleyerek bunu yapabilirsiniz. (Bu değişken build/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.