中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

strace常用命令學習

發布時間:2020-04-27 10:29:31 來源:網絡 閱讀:1215 作者:小楊楊雪松 欄目:編程語言

       strace是一個非常簡單的工具,它可以跟蹤系統調用的執行。它常用來跟蹤進程執行時的系統調用和所接受的信號。在調試的時候,strace能幫助我們追蹤到一個程序所執行的而系統調用。當我們想知道程序和操作系統如何交互的時候,這時極其方便的,比如我們想知道執行了哪些系統調用,并且以何種順序執行。我們知道,在linux中,進程不能直接訪問硬件設備,當進程需要直接訪問硬件設備(比如讀取磁盤文件,接受網絡數據時),必須由用戶態模式切換至內核態模式,通過系統調用訪問硬件設備。strance可以追蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間等等。

       同時,strance是一個集診斷,調試,統計于一體的工具。我們可以使用strance對應用的的系統調用和信號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是了解應用工作過程的目的。


我們先來看看strace的命令都有哪些:

                                    strace常用命令學習

接下來我們通過一個打印“hello world”小程序來練習上面一些常用的選項:

       strace常用命令學習

       從上面我們可以看到,當我們用strace執行test時,系統首先調用execv函數開始一個新的進程,接著進行一些環境初始化的一些操作,然后再調用write函數將“hello world”輸出到屏幕上,最后調用exit_group退出,就這樣完成整個程序的執行過程。


用-s參數實現截斷輸出:

     -s參數用來指定trace的結果的每一行的輸出長度,同樣還是上面的程序,我們看看加了-s參數后的變化:

       strace常用命令學習   

       從上面的結果我們可以看到,本來我們是要輸出“hello world”的,當我們加上-s 選項之后,輸出了“hell”,實現了截斷。


我們再來看看strace的跟蹤信號傳遞功能:

      我們這里還用上面的test程序,來觀察進程接受信號的情況。我們先strace ./test,然后打開另外一個窗口,輸入如下的命令 killall test,這時我們會看到程序退出了,結果如下:

      strace常用命令學習

     上面的現象可以體現出來用strace可以跟蹤進程執行時所接受的信號。


用-c參數還能將進程所有的系統調用做一個統計分析,如下的現象:

      strace常用命令學習

     從上圖我們可以很清楚的知道我們執行一個進程時,調用了哪些系統函數,調用的次數,消耗的時間等信息,這對我們分析一個程序來說是非常有用的。


用-o選項實現重定向輸出:參數-o用于將strace的輸出重定向到文件中,如果不指定-o的話,默認的輸出是stderr,格式是 -o filename,和使用2 > filename是一樣的。我們來看看:

    strace常用命令學習


       用-T選項可以打印出每個系統調用所花費的時間,也就是每行最右邊的尖括號里面(我在圖中用紅顏色的框畫出來的)。這是一個很有用的功能,strace會將系統調用每次的時間記錄下來,我們可以使用-t/tt/ttt看到,比如下面:

      strace常用命令學習

      我們來說一下這三個參數的區別:-t 輸出結果精確到秒,-tt輸出結果精確到微秒,-ttt精確到微秒,而且時間表示為unix時間戳。


用-p追蹤一個現有的進程,用法是 strace -p pid,我們看如下例子:

     strace常用命令學習

      我們的程度是先獲得進程的id,并輸出“hello world”,然后sleep 30秒,在這期間,我們用strace追蹤該進程,輸出上圖的信息,30秒后,進程結束,死奧用seit_group函數。


用-e選項來進行特定的系統調用(例如open,write)等:

        strace常用命令學習

      如上,我們我規定查看open的系統調用,并輸出了相應的信息。


用-r參數展示系統調用之間的相對時間戳:

      strace常用命令學習

 

    其他選項的例子就不一一例舉了,以上幾個選項時比較常用的。











向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

重庆市| 卢湾区| 竹溪县| 高安市| 札达县| 勐海县| 资溪县| 阿瓦提县| 昌平区| 万盛区| 鸡西市| 杨浦区| 堆龙德庆县| 莆田市| 锦屏县| 吉首市| 本溪| 潜山县| 曲松县| 如东县| 鲁山县| 剑川县| 贵定县| 台北县| 望都县| 鄂温| 新巴尔虎左旗| 连平县| 敦煌市| 白水县| 罗田县| 汤阴县| 广德县| 徐汇区| 肥乡县| 台东县| 潮安县| 葵青区| 江油市| 高阳县| 高唐县|