nginx源码分析--使用GDB调试nginx
gdb是linux上调试应用程序的首选。在进行nginx的调试过程中,首先需要修改Makefile文件。vi objs/Makefile#增加 -O0 和 -g 选项; -O0代表不进行优化,-g代表调试模式CFLAGS = -pipe -W -Wall -Wpointer-arith -Wno-unused-parameter -g -O0123
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调试就可以了。
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调试就可以了。
|
更多推荐
所有评论(0)