strace是一個(gè)非常簡單的工具,它可以跟蹤系統(tǒng)調(diào)用的執(zhí)行。它常用來跟蹤進(jìn)程執(zhí)行時(shí)的系統(tǒng)調(diào)用和所接受的信號。在調(diào)試的時(shí)候,strace能幫助我們追蹤到一個(gè)程序所執(zhí)行的而系統(tǒng)調(diào)用。當(dāng)我們想知道程序和操作系統(tǒng)如何交互的時(shí)候,這時(shí)極其方便的,比如我們想知道執(zhí)行了哪些系統(tǒng)調(diào)用,并且以何種順序執(zhí)行。我們知道,在linux中,進(jìn)程不能直接訪問硬件設(shè)備,當(dāng)進(jìn)程需要直接訪問硬件設(shè)備(比如讀取磁盤文件,接受網(wǎng)絡(luò)數(shù)據(jù)時(shí)),必須由用戶態(tài)模式切換至內(nèi)核態(tài)模式,通過系統(tǒng)調(diào)用訪問硬件設(shè)備。strance可以追蹤到一個(gè)進(jìn)程產(chǎn)生的系統(tǒng)調(diào)用,包括參數(shù),返回值,執(zhí)行消耗的時(shí)間等等。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比洛江網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式洛江網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋洛江地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
同時(shí),strance是一個(gè)集診斷,調(diào)試,統(tǒng)計(jì)于一體的工具。我們可以使用strance對應(yīng)用的的系統(tǒng)調(diào)用和信號傳遞的跟蹤結(jié)果來對應(yīng)用進(jìn)行分析,以達(dá)到解決問題或者是了解應(yīng)用工作過程的目的。
我們先來看看strace的命令都有哪些:
接下來我們通過一個(gè)打印“hello world”小程序來練習(xí)上面一些常用的選項(xiàng):
從上面我們可以看到,當(dāng)我們用strace執(zhí)行test時(shí),系統(tǒng)首先調(diào)用execv函數(shù)開始一個(gè)新的進(jìn)程,接著進(jìn)行一些環(huán)境初始化的一些操作,然后再調(diào)用write函數(shù)將“hello world”輸出到屏幕上,最后調(diào)用exit_group退出,就這樣完成整個(gè)程序的執(zhí)行過程。
用-s參數(shù)實(shí)現(xiàn)截?cái)噍敵觯?/p>
-s參數(shù)用來指定trace的結(jié)果的每一行的輸出長度,同樣還是上面的程序,我們看看加了-s參數(shù)后的變化:
從上面的結(jié)果我們可以看到,本來我們是要輸出“hello world”的,當(dāng)我們加上-s 選項(xiàng)之后,輸出了“hell”,實(shí)現(xiàn)了截?cái)唷?/p>
我們再來看看strace的跟蹤信號傳遞功能:
我們這里還用上面的test程序,來觀察進(jìn)程接受信號的情況。我們先strace ./test,然后打開另外一個(gè)窗口,輸入如下的命令 killall test,這時(shí)我們會看到程序退出了,結(jié)果如下:
上面的現(xiàn)象可以體現(xiàn)出來用strace可以跟蹤進(jìn)程執(zhí)行時(shí)所接受的信號。
用-c參數(shù)還能將進(jìn)程所有的系統(tǒng)調(diào)用做一個(gè)統(tǒng)計(jì)分析,如下的現(xiàn)象:
從上圖我們可以很清楚的知道我們執(zhí)行一個(gè)進(jìn)程時(shí),調(diào)用了哪些系統(tǒng)函數(shù),調(diào)用的次數(shù),消耗的時(shí)間等信息,這對我們分析一個(gè)程序來說是非常有用的。
用-o選項(xiàng)實(shí)現(xiàn)重定向輸出:參數(shù)-o用于將strace的輸出重定向到文件中,如果不指定-o的話,默認(rèn)的輸出是stderr,格式是 -o filename,和使用2 > filename是一樣的。我們來看看:
用-T選項(xiàng)可以打印出每個(gè)系統(tǒng)調(diào)用所花費(fèi)的時(shí)間,也就是每行最右邊的尖括號里面(我在圖中用紅顏色的框畫出來的)。這是一個(gè)很有用的功能,strace會將系統(tǒng)調(diào)用每次的時(shí)間記錄下來,我們可以使用-t/tt/ttt看到,比如下面:
我們來說一下這三個(gè)參數(shù)的區(qū)別:-t 輸出結(jié)果精確到秒,-tt輸出結(jié)果精確到微秒,-ttt精確到微秒,而且時(shí)間表示為unix時(shí)間戳。
用-p追蹤一個(gè)現(xiàn)有的進(jìn)程,用法是 strace -p pid,我們看如下例子:
我們的程度是先獲得進(jìn)程的id,并輸出“hello world”,然后sleep 30秒,在這期間,我們用strace追蹤該進(jìn)程,輸出上圖的信息,30秒后,進(jìn)程結(jié)束,死奧用seit_group函數(shù)。
用-e選項(xiàng)來進(jìn)行特定的系統(tǒng)調(diào)用(例如open,write)等:
如上,我們我規(guī)定查看open的系統(tǒng)調(diào)用,并輸出了相應(yīng)的信息。
用-r參數(shù)展示系統(tǒng)調(diào)用之間的相對時(shí)間戳:
其他選項(xiàng)的例子就不一一例舉了,以上幾個(gè)選項(xiàng)時(shí)比較常用的。
當(dāng)前標(biāo)題:strace常用命令學(xué)習(xí)
分享地址:http://sd-ha.com/article36/josdsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、ChatGPT、小程序開發(fā)、動態(tài)網(wǎng)站、用戶體驗(yàn)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)