很多玩Linux系統的朋友應該都比較熟悉strace這個小工具,下面提供一個能夠再android上使用的strace工具
strace簡介:
strace常用來跟蹤進程執行和系統調用情況。
如用來監視系統調用、解決和動態庫相關問題
相關的調用參數說明如下
- -c 統計每一系統調用的所執行的時間,次數和出錯的次數等.
- -d 輸出strace關於標準錯誤的調試資訊.
- -f 跟蹤由fork調用所產生的子進程.
- -ff 如果提供-o filename,則所有進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號.
- -F 嘗試跟蹤vfork調用.在-f時,vfork不被跟蹤.
- -h 輸出簡要的協助資訊.
- -i 輸出系統調用的入口指標.
- -q 禁止輸出關於脫離的訊息.
- -r 列印出相對時間關於,,每一個系統調用.
- -t 在輸出中的每一行前加上時間資訊.
- -tt 在輸出中的每一行前加上時間資訊,微秒級.
- -ttt 微秒級輸出,以秒了表示時間.
- -T 顯示每一調用所耗的時間.
- -v 輸出所有的系統調用.一些調用關於環境變數,狀態,輸入輸出等調用由於使用頻繁,預設不輸出.
- -V 輸出strace的版本資訊.
- -x 以十六進位形式輸出非標準字串
- -xx 所有字串以十六進位形式輸出.
- -a column
- 設定傳回值的輸出位置.預設 為40.
- -e expr
- 指定一個運算式,用來控制如何跟蹤.格式如下:
- [qualifier=][!]value1[,value2]...
- qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用來限定的符號或數字.預設的 qualifier是 trace.驚嘆號是否定符號.例如:
- -eopen等價於 -e trace=open,表示只跟蹤open調用.而-etrace!=open表示跟蹤除了open以外的其他調用.有兩個特殊的符號 all 和 none.
- 注意有些shell使用!來執行記錄裡的命令,所以要使用\\.
- -e trace=set
- 只跟蹤指定的系統 調用.例如:-e trace=open,close,rean,write表示只跟蹤這四個系統調用.預設的為set=all.
- -e trace=file
- 只跟蹤有關檔案操作的系統調用.
- -e trace=process
- 只跟蹤有關進程式控制制的系統調用.
- -e trace=network
- 跟蹤與網路有關的所有系統調用.
- -e strace=signal
- 跟蹤所有與系統訊號有關的 系統調用
- -e trace=ipc
- 跟蹤所有與進程通訊有關的系統調用
- -e abbrev=set
- 設定 strace輸出的系統調用的結果集.-v 等與 abbrev=none.預設為abbrev=all.
- -e raw=set
- 將指 定的系統調用的參數以十六進位顯示.
- -e signal=set
- 指定跟蹤的系統訊號.預設為all.如 signal=!SIGIO(或者signal=!io),表示不跟蹤SIGIO訊號.
- -e read=set
- 輸出從指定檔案中讀出 的資料.例如:
- -e read=3,5
- -e write=set
- 輸出寫入到指定檔案中的資料.
- -o filename
- 將strace的輸出寫入檔案filename
- -p pid
- 跟蹤指定的進程pid.
- -s strsize
- 指定輸出的字串的最大長度.預設為32.檔案名稱一直全部輸出.
- -u username
- 以username 的UID和GID執行被跟蹤的命令
strace.zip
使用說明:
1. 手機終端需要具有root許可權
2. 使用adb push 將strace應用放入到手機中/system/bin/目錄下
adb push c:\strace /system/bin/
3. 使用命令更改strace屬性,是strace具有可執行許可權
adb shell
cd system/bin
chmod 777 strace
strace -p xxxx 查看XXXX進程的函數調用使用方式
其中xxxx為某個進程的PID,
strace -f -o my_trace.txt -e execve ./myscripts
讓strace 記錄監控目前的目錄下myscipts指令碼中調用execve,並將儲存在my_trace.txt檔案中