linux的strace指令(詳解)文庫
linux的strace指令(詳解)文庫.txt
linux的strace指令(詳解)
本文詳細講述linux下的strace指令的用法。
strace 指令是一種強大的工具,它能夠顯示所有由使用者空間程式發出的系統調用。
strace 顯示這些調用的參數并傳回符号形式的值。strace 從核心接收資訊,而且不需要以任何特殊的方式來建構核心。
下面記錄幾個常用 option .
1 -f -F選項告訴strace同時跟蹤fork和vfork出來的程序
2 -o xxx.txt 輸出到某個檔案。
3 -e execve 隻記錄 execve 這類系統調用
—————————————————
程序無法啟動,軟體運作速度突然變慢,程式的”SegmentFault”等等都是讓每個Unix系統使用者頭痛的問題,
本文通過三個實際案例示範如何使用truss、strace和ltrace這三個常用的調試工具來快速診斷軟體的”疑難雜症”。
truss和strace用來跟蹤一個程序的系統調用或信号産生的情況,而 ltrace用來跟蹤程序調用庫函數的情況。truss是早期為System V R4開發的調試程式,包括Aix、FreeBSD在内的大部分Unix系統都自帶了這個工具;
而strace最初是為SunOS系統編寫的,ltrace最早出現在GNU/DebianLinux中。
這兩個工具現在也已被移植到了大部分Unix系統中,大多數Linux發行版都自帶了strace和ltrace,而FreeBSD也可通過Ports安裝它們。
你不僅可以從指令行調試一個新開始的程式,也可以把truss、strace或ltrace綁定到一個已有的PID上來調試一個正在運作的程式。三個調試工具的基本使用方法大體相同,下面僅介紹三者共有,而且是最常用的三個指令行參數:
-f :除了跟蹤目前程序外,還跟蹤其子程序。
-o file :将輸出資訊寫到檔案file中,而不是顯示到标準錯誤輸出(stderr)。
-p pid :綁定到一個由pid對應的正在運作的程序。此參數常用來調試背景程序。
使用上述三個參數基本上就可以完成大多數調試任務了,下面舉幾個指令行例子:
truss -o ls.truss ls -al: 跟蹤ls -al的運作,将輸出資訊寫到檔案/tmp/ls.truss中。
strace -f -o vim.strace vim: 跟蹤vim及其子程序的運作,将輸出資訊寫到檔案vim.strace。
ltrace -p 234: 跟蹤一個pid為234的已經在運作的程序。
三個調試工具的輸出結果格式也很相似,以strace為例:
brk(0) = 0×8062aa8
brk(0×8063000) = 0×8063000
mmap2(NULL,
4096, PROT_READ, MAP_PRIVATE, 3, 0×92f) = 0×40016000
每一行都是一條系統調用,等号左邊是系統調用的函數名及其參數,右邊是該調用的傳回值。 truss、strace和ltrace的工作原理大同小異,都