歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux上進程追蹤與調試(strace和gdb)

Linux上進程追蹤與調試(strace和gdb)

日期:2017/2/28 13:47:19   编辑:Linux教程

引言:

我們某些服務出現故障的時候,我們都是根據屏幕的輸出以及打印的日志來查找出出現了什麼樣的錯誤,但是有時候我們的很多守護進程啟動正常卻訪問不到,比如我們使用Nginx服務,登陸web的時候,卻遲遲不發生頁面跳轉或者訪問頁面遲遲沒反應,這個時候我們就需要對Nginx這個服務做一次進程追蹤,我們使用strace/gdb這樣的命令對進程做一次追蹤,

strace:

1,strace命令說明

strace是能夠顯示用戶空間發出的任何系統調用,在命令的執行過程中,strace會記錄和解析命令進程的所有系統調用以及這個進程所收到的所有信號值

2,strace的使用

1)strace後面直接跟我們的命令

可以看到後面跟了許多系統調用的函數,我們根據這些可以清楚的知道,我們這個命令執行時發生了那些系統調用

2)使用-p選項,這個後面跟我們的pid號,可以查看當前進程處於什麼狀態

我們使用-p選項後面跟著nginx的進程號

我們可以看到,當我們的nginx沒有訪問量的時候,進程處於epoll_wait狀態

當使用ab來對nginx做一次壓力測試的時候,就會發現nginx進程瘋狂的做系統調用

訪問數據的時候,需要處理各種數據,進程會有大量的系統調用產生

3)使用-c選項,我們可以顯示進程使用系統調用的摘要信息,及使用了多少次系統調用

我們可以看到使用的read,write,open這些系統調用,以及總共產生了多少次系統調用

4)使用-o選項,我們可以將分析結構保存在某個文件中,以供後續分析使用

5) 使用-t(秒)-tt(微秒)-ttt(微秒,時間為UNIX時間戳,即從1970年1月1日起的時間)

gdb:

<1>gdb命令說明

gdb是Linux下及UNIX下的程序調試工具,我們可以啟動程序,讓程序按照我們的需求來自由的運行

<2>gdb使用attach,後面跟著我們的pid信息,查看我們的進程狀態

如果想知道程序現在運行到了哪裡,同樣可以使用“backtrace”命令。當然也可以使用“step”命令對程序進行單步調試。在完成調試之後,不要忘記用detach命令斷開連接,讓被調試的進程可以繼續正常運行。

gdb是個很復雜的工具,一般Linux下的C開發程序員會用到的比較多,這裡就不做深入探討了。

GDB調試工具入門 http://www.linuxidc.com/Linux/2016-09/135168.htm

在Ubuntu上用GDB調試printf源碼 http://www.linuxidc.com/Linux/2013-03/80346.htm

Linux下用GDB調試可加載模塊 http://www.linuxidc.com/Linux/2013-01/77969.htm

強大的C/C++ 程序調試工具GDB http://www.linuxidc.com/Linux/2016-09/135171.htm

使用GDB命令行調試器調試C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm

GDB調試命令總結 http://www.linuxidc.com/Linux/2016-08/133988.htm

GDB調試工具入門 http://www.linuxidc.com/Linux/2016-09/135168.htm

GDB 的詳細介紹:請點這裡
GDB 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved