nginx源码分析--使用GDB调试nginx

gdb是linux上调试应用程序的首选。在进行nginx的调试过程中,首先需要修改Makefile文件。

当然,也可以添加 -gstabs 代替 -O0 ,二者是等同的。上面这种方法是在 ./configure 之后的。如果想省事的话,可以执行如下操作,避免了后续对 Makefile 文件的修改。

调试nginx总体来说有三种方法。

一、设置nginx为前台单进程模式

修改配置文件,增加如下两句:

这就可以了,启动调试。

说明:在这个过程中,因为nginx是前台运行,占用了键盘,因此gdb的命令无法输入。需要输入Ctrl+C,暂停nginx,然后设置断点等一系列操作,之后键入 c 则 nginx就会继续运行了。如下所示:

二、设置nginx为后台单进程模式

修改配置文件为:

这样就打开了nginx后台运行的模式,启动gdb调试发现如下:

难道进程真的退出了吗?没有,退出的只是nginx的父进程,而fork出来的进程gdb没有跟到,所以出现了这个情况。这种情况下,gdb是有自己的策略的。命令如下:(其实这一点我还是比较困惑的!)

三、设置nginx为后台多进程模式

这也是nginx的默认运行模式。在这种情况下,使用gdb的attach和detach指令。

首先查看nginx的work_process进程号是多少,然后直接attach调试就可以了。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Reading symbols from /usr/local/nginx/sbin/nginx...done.
(gdb) run
Starting program: /usr/local/nginx/sbin/nginx
[Thread debugging using libthread_db enabled]
 
Program exited normally.
(gdb) shell pidof nginx
5776 5775
(gdb) attach 5775
Attaching to program: /usr/local/nginx/sbin/nginx, process 5775
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib/libpthread.so.0
 
#停止调试,使用detach即可








gdb是linux上调试应用程序的首选。在进行nginx的调试过程中,首先需要修改Makefile文件。

当然,也可以添加 -gstabs 代替 -O0 ,二者是等同的。上面这种方法是在 ./configure 之后的。如果想省事的话,可以执行如下操作,避免了后续对 Makefile 文件的修改。

调试nginx总体来说有三种方法。

一、设置nginx为前台单进程模式

修改配置文件,增加如下两句:

这就可以了,启动调试。

说明:在这个过程中,因为nginx是前台运行,占用了键盘,因此gdb的命令无法输入。需要输入Ctrl+C,暂停nginx,然后设置断点等一系列操作,之后键入 c 则 nginx就会继续运行了。如下所示:

二、设置nginx为后台单进程模式

修改配置文件为:

这样就打开了nginx后台运行的模式,启动gdb调试发现如下:

难道进程真的退出了吗?没有,退出的只是nginx的父进程,而fork出来的进程gdb没有跟到,所以出现了这个情况。这种情况下,gdb是有自己的策略的。命令如下:(其实这一点我还是比较困惑的!)

三、设置nginx为后台多进程模式

这也是nginx的默认运行模式。在这种情况下,使用gdb的attach和detach指令。

首先查看nginx的work_process进程号是多少,然后直接attach调试就可以了。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Reading symbols from /usr/local/nginx/sbin/nginx...done.
(gdb) run
Starting program: /usr/local/nginx/sbin/nginx
[Thread debugging using libthread_db enabled]
 
Program exited normally.
(gdb) shell pidof nginx
5776 5775
(gdb) attach 5775
Attaching to program: /usr/local/nginx/sbin/nginx, process 5775
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib/libpthread.so.0
 
#停止调试,使用detach即可

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值