日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用strace和ltrace跟踪程序调用

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用strace和ltrace跟踪程序调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ltrace能夠跟蹤進程的庫函數調用,它會顯現出哪個庫函數被調用,而strace則是跟蹤程序的每個系統調用.

1.系統調用的輸出對比

程序代碼:
#include <stdio.h>
main(){char str[]= "Abcde";printf("\n string = %s length = %d \n",str,str_length(str));
}int str_length (const char *s){int length = 0;while (*s++){length++;}return (length);
}

#ltrace跟蹤程序:


#strace跟蹤程序:


我們看到程序調用write()系統調用做了輸出,同時strace還把程序運行時所做的系統調用都打印出來了.
其實#ltrace -S也可以把系統調用都打印出來:


注:我們看到它實際是用SYS_write系統調用來做打印輸出,其實write()函數是SYS_write的封裝,SYS_write是真正的系統調用.

2.ltrace/strace的耗時
# ltrace -c dd if=/dev/urandom of=/dev/null count=1000

使用-c選項,ltrace輸出由進程創建的庫調用,輸出結果以調用過程的時間為準進行排序,因為是從urandom設備上讀,這是一種產生隨機數的設備,完成后,寫入null設備. 所以讀過程花費了較多的時間. 使用ltrace去捕獲運行時函數,就好像在進程上系上了一個調試工具,它占據了ltrace大量的時間,這里ltrace一共消耗了3.28秒.

我們再來看一下strace所花費的時間:
# strace -c dd if=/dev/urandom of=/dev/null count=1000


strace一共消耗了0.008秒,strace把性能提升了很多倍,這主要是strace在跟蹤系統調用的時候不需要動態庫,而ltrace是根據動態庫來分析程序運行的. 所以ltrace也只能跟蹤動態庫,不能跟蹤靜態庫. 事實上我們用ltrace和strace都可以發現程序在哪個系統調用時發生了性能瓶徑. ltrace用-T,而strace也用-T.
3.ltrace與strace的相同點
ltrace與strace都可以指定PID,即對運行中的程序進行跟蹤. ltrace -p PID與strace -p PID

ltrace與strace都可以跟蹤程序fork或clone子進程. ltrace是用-f參數,而strace是用-f(fork/clone)和-F(vfork).
擴充閱讀:

技巧: 使用truss、strace或ltrace診斷軟件的"疑難雜癥"

總結

以上是生活随笔為你收集整理的使用strace和ltrace跟踪程序调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。