日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx模块_使用gdb调试nginx源码

發布時間:2025/3/8 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx模块_使用gdb调试nginx源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工欲善其事必先利其器,如何使用調試工具gdb一步步調試nginx是了解nginx的重要手段。

ps:本文的目標人群是像我這樣初接觸Unix編程的同學,如果有什么地方錯誤請指正。

熟悉gdb的使用

這里就不說了,谷歌一搜一堆,這里推薦一篇文章:GDB 命令詳細解釋

請重點看一下step,run,break,list,info,continue命令

下載nginx源碼

這里使用nginx-1.0.14

src是源代碼,auto文件夾是configure運行時候的各種命令集合

修改config并編譯

由于gdb需要gcc的時候加上-g參數,這樣生成的文件才能使用gdb調試,因此我們要對源碼做一下小改動

修改auto/cc/conf文件

ngx_compile_opt="-c"

變為

ngx_compile_opt="-c -g"

執行configure

./configure --prefix=/home/yejianfeng/nginx/

確認

發現多出了objs文件夾,里面有Makefile文件

確認一下-g參數是否加上了

vim objs/Makefile

確認已經加上了-g,

make

生成可執行文件

至此,nginx可執行文件已經成功編譯了。

生成gdb所需要的core文件

gdb的core文件是為了保證在調試過程中遇到問題可以隨時重新啟動調試進程,更便于調試。

啟動nginx

在objs目錄下 ./nginx

ps aux|grep nginx

看到nginx啟動了一個master進程(18237)和一個worker進程(18238)

在objs目錄下運行命令

gcore 18237

看到core.188237生成了。

殺死nginx進程,包括master和worker

./nginx -s stop(或者直接使用kill)

啟動調試

[root@localhost objs]# gdb ./nginx core.18237

此時進入gdb模式

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一步一步進行調試吧

調試中可能遇到的問題

nginx是master-worker模式,當fork出現子進程的時候如何進入子進程呢?

(gdb)set follow-fork-mode child

這個命令可以是

set follow-fork-mode parent

set follow-fork-mode child

請參考:Debugging Forks

print(p)能否打印出指針指向的內容呢?

(gdb)p *ptr

當使用attach pid進入某個進程的時候出現錯誤

(gdb) attach 30721

Attaching to program: /data0/s/bin/s, process 30721

ptrace: Operation not permitted.

這個錯誤是由于有其他gdb也在調試這個進程

請確定是否有另外的終端或者另外的同事在gdb這個進程







本文轉自軒脈刃博客園博客,原文鏈接:http://www.cnblogs.com/yjf512/archive/2012/05/10/2494635.html,如需轉載請自行聯系原作者

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的nginx模块_使用gdb调试nginx源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。