Linux除錯工具strace和lsof學習

2021-10-03 16:26:15 字數 4235 閱讀 4388

1strace工具

1)簡介

strace是乙個集診斷、除錯、統計於一體的工具,常用來跟蹤程序執行時的系統呼叫和所接收的訊號。在linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置時,必須由使用者態切換至核心態模式,通過系統呼叫訪問硬體裝置。strace

可以跟蹤到乙個程序產生的系統呼叫函式,包括引數,返回值,執行消耗的時間。

2)使用引數

-p     跟蹤指定的程序

-f      跟蹤由fork子程序系統呼叫

-f     嘗試跟蹤vfork子程序系統呼叫,與-f同時出現時,vfork不被跟蹤

-o     filename 將輸入寫入到filename檔案中

-ff    常與-o選項一起使用,不同程序(子程序)產生的系統呼叫輸出到filename.pid檔案

-r      列印每乙個系統呼叫的相對時間

-t      在輸出的每一行前加上時間資訊,-tt時間精確到毫秒級,還可以使用-ttt列印相對時間

-v     輸出所用系統呼叫,預設情況下,一些頻繁呼叫的系統呼叫不會輸出

-s      指定每一行輸出字串的長度,預設32。檔名一致全部輸出

-c      統計每種系統呼叫所執行的時間,呼叫次數,出錯次數

-e    expr輸出過濾器,通過表示式,可以過濾掉不需要的輸出內容

3)使用示例

strace –p pid                              跟蹤某個後台程序

strace –o filename                           輸出跟蹤結果到檔案

strace –t                                               記錄每個系統呼叫花費的時間,看看哪個系統呼叫時間長

strace –t(或者-tt)             記錄每個系統呼叫發生時的時間

strace –s 1024                           顯示系統呼叫引數時,對於字串顯示的長度,預設是32,如果字串引數很長時會顯示不全

strace –e trace=nanosleep  只記錄相關的系統呼叫資訊

-e trace=network      只記錄和網路api相關的系統呼叫

-e trace=file                 只記錄涉及到檔名的系統呼叫

-e trace=desc              只記錄涉及到檔案控制代碼的系統呼叫

其它還有process,ipc,signal等。

2lsof工具

1)簡介

lsof(list open files)是乙個列出當前系統開啟檔案的工具,在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議(tcp)和使用者資料報協議(udp)套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠檢視這個列表對系統檢測以及排錯將是很有幫助的。

2)基本用法

在終端下輸入lsof即可顯示系統開啟的檔案,因為lsof需要訪問核心記憶體和各種檔案,所以必須以root使用者的身份執行它才能夠充分地發揮其功能。

lsof輸出各列資訊的意義如下:

command:程序的名稱

pid:程序識別符號

user:程序所有者

fd:檔案描述符,如cwd、txt等

type:檔案型別,如dir、reg等

device:指定磁碟的名稱

size:檔案的大小

node:索引節點(檔案在磁碟上的標識)

name:開啟檔案的確切名稱

fd列中的檔案描述符cwd值表示應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。txt型別的檔案時程式**,如應用程式二進位制檔案本身或共享庫。

其次數值表示應用程式的檔案描述符,這是開啟該檔案時返回的乙個整數。u表示該檔案被開啟並處於讀取/寫入模式,而不是唯讀(r)或只寫(w)模式。同時大寫的w表示該應用程式具有對整個檔案的寫鎖。初始開啟每個應用程式時,都具有三個檔案描述符,從0到2,分別表示標準輸入、輸出和錯誤流。所以大多數應用程式所開啟的檔案的fd都是從3開始。

type列比較直觀,檔案和目錄分別稱為reg和dir。而chr和blk,分別表示字元和塊裝置。;或者unix、fifo和ipv4,分別表示unix域套接字、先進先出(fifo)佇列和網際協議(ip)套接字。

3)常用引數

lsof的語法格式是:

lsof           [option]           filename

例如:lsof abc.txt                         顯示開啟檔案abc.txt的程序

lsof –c abc                          顯示abc程序現在開啟的檔案

lsof –c –p 1234                 列出程序號為1234的程序所開啟的檔案

lsof –g gid                           顯示歸屬gid的程序情況

lsof +d /usr/local/          顯示目錄下被程序開啟的檔案

lsof +d /usr/local/          同上,但是會搜尋目錄下的目錄,時間較長

lsof –d 4                              顯示使用fd為4的程序

lsof –i                                   用以顯示符合條件的程序情況

4)使用例項

lsof 『which httpd』           檢視哪個程序在使用apache的可執行檔案

lsof /etc/passwd            檢視哪個程序在占用/etc/passwd

lsof /dev/hda6                檢視哪個程序在占用hda6

lsof /dev/cdrom             檢視哪個程序在占用光碟機

lsof –c sendmail              檢視sendmail程序的檔案使用情況

lsof –c courier –u ^zahn        顯示出哪些檔案被以courier打頭的程序開啟,但不屬於使用者zahn的

lsof –p 30297                    顯示哪些檔案被程序30297開啟

lsof –d /tmp                     顯示所有在/tmp資料夾中開啟的instance和檔案的程序。但是symbol檔案並不在列

lsof –u 1000                      檢視uid是1000的使用者的程序的檔案使用情況

lsof –u tony                      檢視使用者tony的程序的檔案使用情況

lsof –u ^tony                    檢視不是使用者tony的程序的檔案使用情況

lsof –i                                 檢視所有開啟的埠

lsof –i: 80                           檢視所有開啟80埠的程序

lsof –i –u                                     檢視所有開啟的埠和unix domin檔案

除錯工具Strace

0.strace是什麼?按照strace官網的描述,strace是乙個可用於診斷 除錯和教學的linux使用者空間 我們用它來監控使用者空間程序和核心的互動,比如系統呼叫 訊號傳遞 程序狀態變更等。原始碼 1.編譯移植strace configure prefix pwd install 以x86平...

Linux除錯工具strace和gdb常用命令小結

linux除錯工具strace和gdb常用命令小結 strace和gdb是linux環境下的兩個常用除錯工具,這裡是個人在使用過程中對這兩個工具常用引數的總結,留作日後檢視使用。strace除錯工具 strace工具用於跟蹤程序執行時的系統呼叫和所接收的訊號,包括引數 返回值 執行時間。在linux...

linux命令之除錯工具strace的深入分析

參考 1 linux的strace命令 詳解 txt 新浪電子書可 2man strace 乙個基本上通用的 完整的用法 strace o output.txt t tt e trace all p 28979 上面的含義是 跟蹤28979程序的所有系統呼叫 e trace all 並統計系統呼叫的...