gdb調試技巧

 

Gdb調試技巧nginx

1, 添加調試信息shell

g++  -g  test.cpp  –o  testvim

2, 經常使用命令函數

顯示圖形化代碼 Ctrl+x+a操作系統

啓動程序 r (run)調試

斷點 b (breakpoint)進程

清除/禁用/啓用斷點 delete/disable/enable內存

單步 s (step 碰到函數會進入)element

單行 n (next 碰到函數不會進行, 而是整條執行)字符串

執行到下一個斷點 c (continue)

查看變量 p (print)

  顯示完整的長字符串:set print element 0

顯示變量 display

查看當前調用堆棧 bt (backtrace)

查看某一層調用代碼 f (frame)

3, 調試core dump

程序執行時,常常會由於段錯誤segment fault而退出,操做系統會把此程序當前內存信息dump到磁盤上,即生成core文件,對core進行分析能夠很快分析出致使程序crash的地方

 

 

 

 

 

 

 

 

 

 

 

 

 

3.1,設置core文件大小

系統默認不會生成core文件,須要進一步設置。core文件的生成依賴於shell的設置,在shell中運行命令:ulimit –a,能夠查看系統的默認設置。使用命令ulimit –c unlimited 能夠設置core file size 爲無限。

 

永久設置coredump的方法:

sudo vim /etc/security/limits.conf

文件最後增長以下兩行

@username soft core unlimited

@username hard core unlimited

永久設置coredump文件路徑及其文件名稱的方法

sudo vim /etc/sysctl.conf

文件最後增長以下兩行

kernel.core_pattern = /opt/tercel/core_log/core_%e_%t_%p

kernel.core_uses_pid = 0

使用命令sudo sysctl –p使得修改生效

 

3.2,生成core文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.3,調試簡單core文件

使用gdb ./test core來調試core,發現gdb直接就定位到了出錯的語句。

 

 

 

 

 

 

 

 

 

 

 

3.4,使用breaktrace 和frame命令

 

 

4, 利用gdb調試找出nginx崩潰的方法

1, 使用命令:ulimit –a檢查core file設置的是否正確,見前面說明;

2, 將nginx源碼目錄文件auto/cc/conf中的一行「ngx_compile_opt=「-c」」更改成「ngx_compile_opt=」-c -g」」

3, 在nginx源碼目錄下執行sudo ./configure命令

4, 編譯nginx源碼,將objs目錄下的nginx文件複製到nginx運行目錄,此步切記不要make install,不然會覆蓋nginx.conf

5, 重啓nginx,等待core.*****文件生成

6, gdb加載coredump文件:gdb –core=core.****

7, gdb>where 就很容易找到nginx segfault的緣由了

5, gdb加載nginx運行中的work進程

1, ps –ef|grep nginx查看當前nginx運行進程;

2, sudo gdb進入gdb調試環境;

3, attach pid(進程id);

4, break ****命令設置斷點;

5, c命令運行到斷點位置開始單步調試

相關文章
相關標籤/搜索