溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

今天給大家分享 基于Linux調(diào)試工具strace與gdb的

發(fā)布時(shí)間:2020-08-01 22:54:20 來源:網(wǎng)絡(luò) 閱讀:211 作者:藍(lán)隊(duì)云服務(wù) 欄目:系統(tǒng)運(yùn)維

strace和gdb是Linux環(huán)境下的兩個(gè)常用調(diào)試工具,這里是個(gè)人在使用過程中對(duì)這兩個(gè)工具常用參數(shù)的總結(jié),留作日后查看使用。

strace調(diào)試工具

strace工具用于跟蹤進(jìn)程執(zhí)行時(shí)的系統(tǒng)調(diào)用和所接收的信號(hào),包括參數(shù)、返回值、執(zhí)行時(shí)間。在Linux中,用戶程序要訪問系統(tǒng)設(shè)備,必須由用戶態(tài)切換到內(nèi)核態(tài),這是通過系統(tǒng)調(diào)用發(fā)起并完成的。

strace常用參數(shù):

-c  統(tǒng)計(jì)每種系統(tǒng)調(diào)用執(zhí)行的時(shí)間、調(diào)用次數(shù)、出錯(cuò)次數(shù),程序退出時(shí)給出報(bào)告

-p pid  跟蹤指定的進(jìn)程,可以使用多個(gè)-p同時(shí)跟蹤多個(gè)進(jìn)程

-o filename  strace默認(rèn)輸出到stdout,-o可以將輸出寫入到指定的文件

-f  跟蹤由fork產(chǎn)生的子進(jìn)程的系統(tǒng)調(diào)用

-ff  常與-o選項(xiàng)一起使用,不同進(jìn)程(子進(jìn)程)產(chǎn)生的系統(tǒng)調(diào)用輸出到各個(gè)filename.pid文件中

-F  嘗試跟蹤vfork子進(jìn)程系統(tǒng)調(diào)用,注意:與-f同時(shí)使用時(shí), vfork不被跟蹤

-e expr  輸出過濾表達(dá)式,可以過濾掉不想輸出的strace結(jié)果

-e trace=set  指定跟蹤set中的系統(tǒng)調(diào)用

-e trace=network  跟蹤與網(wǎng)絡(luò)有關(guān)的所有系統(tǒng)調(diào)用

-e strace=signal  跟蹤所有與系統(tǒng)信號(hào)有關(guān)的系統(tǒng)調(diào)用

-e trace=ipc  跟蹤所有與進(jìn)程通訊有關(guān)的系統(tǒng)調(diào)用

-e signal=set  指定跟蹤set中的信號(hào)

-e read=set  輸出從指定文件中讀出的數(shù)據(jù),例如-e read=3,5

-e write=set  輸出寫入到指定文件中的數(shù)據(jù),例如-e write=1

-r  打印每一個(gè)系統(tǒng)調(diào)用的相對(duì)時(shí)間

-t  在輸出中的每一行前加上時(shí)間信息

-tt  在輸出中的每一行前加上時(shí)間信息,時(shí)間精確到微秒級(jí)

-ttt  在輸出中的每一行前加上時(shí)間信息,輸出為相對(duì)時(shí)間

-s  指定每一行輸出字符串的長度(默認(rèn)為32)

strace使用舉例:

strace -t whoami #跟蹤whoami可執(zhí)行程序,每行輸出結(jié)果前打印執(zhí)行的時(shí)間

strace -p 17151 -p 17152 -p 17153 #同時(shí)跟蹤進(jìn)程17151、17152、17153

strace -f -e trace=read,write -p 17151 -o log #跟蹤進(jìn)程17151及子進(jìn)程中read和write系統(tǒng)調(diào)用,輸出到log文件

gdb調(diào)試工具

GDB是GNU開源組織發(fā)布的一個(gè)強(qiáng)大的UNIX下的程序調(diào)試工具。gcc編譯時(shí)加上-g參數(shù),可以使可執(zhí)行程序加上gdb調(diào)試信息。

(1)info

簡寫:i,列出gdb子命令的信息,如info break,info variables,info stack等。

(2)list [file:]function

簡寫:l,查看當(dāng)前行的上下文,默認(rèn)為10行,也可以設(shè)置在某個(gè)函數(shù)處列出源碼。

(3)edit [file:]function

簡寫:e,編輯當(dāng)前所在的行,也可以編輯某個(gè)函數(shù)的源碼。

(4)break [file:]function

簡寫:b,設(shè)置斷點(diǎn),可以設(shè)置在某行或某個(gè)函數(shù)處。

(5)run [arglist]

簡寫:r,運(yùn)行程序至斷點(diǎn)處停住,run命令之后可以加上調(diào)試程序需要的參數(shù)。

(6)next

簡寫:n,單條語句執(zhí)行。

(7)continue

簡寫:c,繼續(xù)運(yùn)行程序至下一個(gè)斷點(diǎn)。

(8)print

簡寫:p,打印變量的值。

(9)bt

查看函數(shù)堆棧信息。

(10)enter

回車鍵,重復(fù)上一次調(diào)試命令。

(11)help [name]

顯示指定的gdb命令的幫助信息。

(12)quit

簡寫:q,退出gdb。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI