linux strace命令用法

2021-09-01 01:13:03 字數 3573 閱讀 4397

linux strace命令用法

呼叫:

strace [ -dffhiqrttttvxx ] [ -acolumn ] [ -eexpr ] ...

[ -ofile ] [ -ppid ] ... [ -sstrsize ] [ -uusername ] [ command [ arg ... ] ]

strace -c [ -eexpr ] ... [ -ooverhead ] [ -ssortby ] [ command [ arg ... ] ]

功能:

跟蹤程式執行時的系統呼叫和所接收的訊號.通常的用法是strace執行一直到commande結束.

並且將所呼叫的系統呼叫的名稱、引數和返回值輸出到標準輸出或者輸出到-o指定的檔案.

strace是乙個功能強大的除錯,分析診斷工具.你將發現他是乙個極好的幫手在你要除錯乙個無法看到原始碼或者原始碼無法在編譯的程式.

你將輕鬆的學習到乙個軟體是如何通過系統呼叫來實現他的功能的.而且作為乙個程式設計師,你可以了解到在使用者態和核心態是如何通過系統呼叫和訊號來實現程式的功能的.

strace的每一行輸出包括系統呼叫名稱,然後是引數和返回值.這個例子:

strace cat /dev/null

他的輸出會有:

open(\"/dev/null\",o_rdonly) = 3

有錯誤產生時,一般會返回-1.所以會有錯誤標誌和描述:

open(\"/foor/bar\",)_rdonly) = -1 enoent (no such file or directory)

訊號將輸出喂訊號標誌和訊號的描述.跟蹤並中斷這個命令\"sleep 600\":

sigsuspend({}

--- sigint (interrupt) ---

+++ killed by sigint +++

引數的輸出有些不一致.如shell命令中的 \">>tmp\",將輸出:

對於結構指標,將進行適當的顯示.如:\"ls -l /dev/null\":

lstat(\"/dev/null\",,st_rdev=makdev[1,3],...}) = 0

請注意\"struct stat\" 的宣告和這裡的輸出.lstat的第乙個引數是輸入引數,而第二個引數是向外傳值.

當你嘗試\"ls -l\" 乙個不存在的檔案時,會有:

lstat(/foot/ball\",0xb004) = -1 enoent (no such file or directory)

char*將作為c的字串型別輸出.沒有字串輸出時一般是char* 是乙個轉義字元,只輸出字串的長度.

當字串過長是會使用\"...\"省略.如在\"ls -l\"會有乙個gepwuid呼叫讀取password檔案:

read(3,\"root::0:0:system administrator:/\"...,1024) = 422

當引數是結構陣列時,將按照簡單的指標和陣列輸出如:

getgroups(4,[0,2,4,5]) = 4

關於bit作為引數的情形,也是使用方括號,並且用空格將每一項引數隔開.如:

sigprocmask(sig_block,[chld ttou],) = 0

這裡第二個引數代表兩個訊號sigchld 和 sigttou.如果bit型引數全部置位,則有如下的輸出:

sigprocmask(sig_unblock,~,null) = 0

這裡第二個引數全部置位.

引數說明:

-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執行被跟蹤的命令.

at 命令用法

at命令的用法 at列出在指定的時間和日期在計算機上執行的已計畫命令或計畫命令和程式。必須正在執行 計畫 服務才能使用 at 命令。at computername id delete delete yes at computername time interactive every date nex...

dqkg的命令用法 nc命令用法舉

什麼是nc nc是netcat的簡寫,有著網路界的瑞士軍刀美譽。因為它短小精悍 功能實用,被設計為乙個簡單 可靠的網路工具 nc的作用 1 實現任意tcp udp埠的偵聽,nc可以作為server以tcp或udp方式偵聽指定埠 2 埠的掃瞄,nc可以作為client發起tcp或udp連線 3 機器之...

mount命令用法

mount命令用法 1.掛載點必須是乙個已經存在的目錄,mount沒有建立掛載點的功能 2.乙個分割槽掛載在乙個已存在的目錄,如果這個目錄裡以及那個存在內容,那麼掛載後這些內容將失去作用 3.掛載的時候需要注意系統是不是支援使用的檔案系統的格式,光碟是iso9660,軟盤是fat16或ext2,wi...