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即可

Logo

更多推荐