發表文章

目前顯示的是 6月, 2018的文章

strace追蹤程式使用的system call

圖片
追蹤指令使用的system call strace cat /dev/null -t 追蹤輸出加入時間資訊, 時:分:秒 -tt 使用時:分:秒.微秒資訊, 例如11:22:33.123456 -ttt 使用timestamp微秒數值 -r 顯示相對時間 -T 顯示耗用時間 -o {Output file path} 輸出到檔案, 如果不使用-o 也可以用重導向stderr 2>{Output file path}  -c 統計呼叫的次數與錯誤 -x 以十六進位輸出含有不可印的字串 -xx 所有字串以十六進位輸出 -s {length} 輸出字串時最多印出的字數, 超過就會在後面加上...表示大於長度 -v 輸出所有的系統呼叫, 因為會太多資訊所以一般會使用-e指定要追蹤的類型 -f 追蹤fork -ff 追蹤fork, 如果有-o選項的話, fork的pid會輸出到{Output file path}.{pid} -F 追蹤vfork -u {username} 以特定使用者執行程式並追蹤 追蹤已啟動的process運作 strace -p {ProcessID} 追蹤特定的system call 像是可以用-eopen來追蹤loader載入的library strace -eopen -f ./test 或是追蹤gcc的運作 strace -eopen -f gcc test.c -o test -e 的語法是 -e [qualifier=][!]value1[,value2]... qualifier的選項有trace,abbrev,verbose,raw,signal,read,write,預設不寫是用trace, 所以上面的指令用-eopen等於是-e trace=open !表示不包含/排除 value的選項通常有open,close,rean,write,all,none, trace本身有額外的value可用, file,procee,Network,signal,ipc signal有其他的用法, 像是要排除signal SIGIO的部分, 可以寫-e signal=!SIGIO 實際使用 str