工欲善其事必先利其器,如何使用除錯工具gdb一步步除錯nginx是了解nginx的重要手段。
ps:本文的目標人群是像我這樣初接觸unix程式設計的同學,如果有什麼地方錯誤請指正。
這裡就不說了,谷歌一搜一堆,這裡推薦一篇文章:gdb 命令詳細解釋
請重點看一下step,run,break,list,info,continue命令
這裡使用nginx-1.0.14
src是源**,auto資料夾是configure執行時候的各種命令集合
由於gdb需要gcc的時候加上-g引數,這樣生成的檔案才能使用gdb除錯,因此我們要對原始碼做一下小改動
ngx_compile_opt="-c"
變為ngx_compile_opt="-c -g"
./configure --prefix=/home/yejianfeng/nginx/
發現多出了objs資料夾,裡面有makefile檔案
確認一下-g引數是否加上了
確認已經加上了-g,
make
生成可執行檔案
至此,nginx可執行檔案已經成功編譯了。
gdb的core檔案是為了保證在除錯過程中遇到問題可以隨時重新啟動除錯程序,更便於除錯。
在objs目錄下 ./nginx
看到nginx啟動了乙個master程序(18237)和乙個worker程序(18238)
看到core.188237生成了。
./nginx -s stop(或者直接使用kill)
[root@localhost objs]# gdb ./nginx core.18237
此時進入gdb模式
使用l(list)命令檢視main 函式,這個main函式是在src/core/nginx.c裡面,是nginx的入口函式
(gdb) l #列出原始檔,只列出10行,請使用l- 和 l 或者l +行號 或者 l +函式名 進行定位
(gdb) break 215 #在哪行打斷點
(gdb) r #run,從main函式開始執行程式
此時進入另乙個終端檢視程序情況
看到已經啟動了乙個nginx了
此時在gdb中就可以進行除錯了
下面就使用next和step一步一步進行除錯吧
(gdb)set follow-fork-mode child
這個命令可以是
set follow-fork-mode parent
set follow-fork-mode child
請參考:debugging forks
(gdb)p *ptr
(gdb) attach 30721
attaching to program: /data0/s/bin/s, process 30721
ptrace: operation not permitted.
這個錯誤是由於有其他gdb也在除錯這個程序
請確定是否有另外的終端或者另外的同事在gdb這個程序
gdb除錯nginx的helloworld
debugging forks
nginx原始碼閱讀筆記
nginx模組 使用gdb除錯nginx原始碼
工欲善其事必先利其器,如何使用除錯工具gdb一步步除錯nginx是了解nginx的重要手段。ps 本文的目標人群是像我這樣初接觸unix程式設計的同學,如果有什麼地方錯誤請指正。這裡就不說了,谷歌一搜一堆,這裡推薦一篇文章 gdb 命令詳細解釋 請重點看一下step,run,break,list,i...
使用gdb除錯nginx原始碼
葉劍峰 包含鏈結 這裡就不說了,谷歌一搜一堆,這裡推薦一篇文章 gdb 命令詳細解釋 請重點看一下step,run,break,list,info,continue命令 這裡使用nginx 1.0.14 src是源 auto資料夾是configure執行時候的各種命令集合 由於gdb需要gcc的時候...
gdb除錯使用
功夫再牛也怕菜刀,程式設計師不可能不犯錯誤,在linux下面除錯我們使用gdb,這次就講他的使用,它可以除錯c和c gdb提供的功能有 1.監視程式中的變數的值 2。設定斷點停止 執行 3,一行行的執行 使用方式很簡單,在命令列鍵入gdb就能用了,正常啟動就會有如下類似的內容,在這裡可以鍵入命令來指...