亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

黔西县| 苏尼特右旗| 安多县| 唐河县| 平湖市| 马公市| 深泽县| 白水县| 交口县| 米脂县| 莲花县| 云龙县| 北辰区| 嫩江县| 偃师市| 长葛市| 广东省| 成都市| 宁远县| 小金县| 九寨沟县| 阜新| 阆中市| 台前县| 左权县| 满城县| 肇州县| 屏东市| 林芝县| 鹤壁市| 萝北县| 阿克| 大英县| 大宁县| 临夏县| 茂名市| 财经| 长丰县| 井冈山市| 个旧市| 博乐市|