2012年1月21日 星期六

strace for Andorid JNI program

strace -f -F -p <pid_for_zygote>

這樣就可以看到 strace 到所有的 dvm 程式, 並且包含之後新開出來的 dvm

不過要注意的是需要 su 權限不然會看到下列的訊息
而以下為方便說明起見假設 zygote 的 pid 為 84

shell@android:/ $ strace  -f -F -p 84
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

正常啟動則會像下面這樣開始吐一些訊息

shell@android:/ $ strace  -f -F -p 84
Process 1339 attached with 4 threads - interrupt to quit
[pid  1339] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid  1339] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid  1339] setup()                     = -1 ETIMEDOUT (Connection timed out)
[pid  1339] msgget(0x1, 0x4e07cd48, 0, 0x4e07cd48) = 0
[pid  1339] msgget(0x1, 0x4e07cd28, 0x1, 0x1) = 0
[pid  1339] recv(6604760,  <unfinished ...="">
[pid  1338] --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
[pid  1338] 


輸出可能會有點雜亂, 大致的原則是程式開下去就會噴出一堆紀錄, 所以最好先輸出成檔案, 在拉到電腦端分析.

shell@android:/ $ strace  -f -F -p 84 &>/sdcard/strace.log

拉回電腦端就可以先用搜索 apk 關鍵字來鎖定你的程式的 pid 多少, 再配合 grep 即可快速濾出需要的資訊摟~

沒有留言:

張貼留言