Strace, bir sürecin yaptığı sistem çağrılarını ve bu sistem çağrılarının döndürdüğü değerleri görmenizi sağlar.
Katman oluştur
strace'i derlemek için aşağıdakileri çalıştırın:
mmma -j6 external/strace
Çalışan bir sürece ekleme
strace'in en basit ve en yaygın kullanım alanı, çalışan bir işleme eklemektir. Bunu aşağıdaki yöntemlerle yapabilirsiniz:
adb shell strace -f -p PID
-f
işareti, strace'e işlemdeki tüm iş parçacıklarına ve daha sonra ortaya çıkan yeni iş parçacıklarına eklemesini söyler.
Tipik bir işlem çok sayıda sistem çağrısı yapar. Bu nedenle, yalnızca ilgilendiğiniz verileri nasıl toplayacağınızı öğrenmek için strace man sayfasını incelemeniz gerekir.
Uygulamada kullanma
Bir uygulamada strace'i kullanmak için:
- Cihazı, strace'i çalıştırabilecek şekilde ayarlayın. strace'in çalışmasını engelleyen 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 kullanıcı kimliği altında çalışacağı için strace günlükleri için herkese açık yazılabilir 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 kullanın
Zigot üzerinde 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'in başlatılması sırasında strace günlüklerini alma
Android'in önyükleme sırasında strace günlüklerini almak için aşağıdaki değişiklikleri yapın:
- İşlem adı
zygote
yerinestrace
olarak değiştiğinden,strace
için SELinuxfile_context
eksik olduğundan söz konusu hizmet başlatılamayabilir. Çözüm,system/sepolicy/private/file_contexts
içinde satır için yeni bir satır ekleyip orijinal dosya bağlamını 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 izin verici modunda önyükleyin. Bu işlemi,
androidboot.selinux=permissive
BOARD_KERNEL_CMDLINE
öğesine ya da Android 12'de çekirdek sürümü 5.10 veya daha yeni olanBOARD_BOOTCONFIG
öğesine ekleyerek yapabilirsiniz. (Bu değişkenbuild/core/Makefile
ürününde salt okunur olur ancak/device/*/BoardConfig
altında her zaman kullanılabilir.)
/device/google/marlin/sailfish/BoardConfig.mk
bölgesindeki Pixel (sailfish) cihaz için örnek: Değişikliği yaptıktan sonra, önyükleme görüntüsünü derleyip flaşlayın. Böylece cihaz izin verilen modda önyüklenir.- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive