本文主要内容讲述如何使用 gdb 对 nginx 进行调式。本文使用的 nginx 版本是1.0.14。

1. 下在 nginx 源代码,进行解压。我的源代码放在 ~/Desktop/Learn/nginx/下。

2. 进入 nginx-1.0.14 目录,进行 configure [这里不要考虑 –prefix之类的命令,这里只需要使用默认命令即可]

3. 因为需要进行调式,所以需要在编译代码时加上”-g”选项,以及去掉所有的优化选项[即 -O1,-O2 等,可以改成-O0],这个可以在 nginx-1.0.14/objs/Makefile 文件中对 CFLAGS 进行修改。

4. 在 nginx-1.0.14 目录下进行 make,如果你前面已经 make 过一次,而这次 make 的时候提示说已经时最新的了,那么就用 “make -B” 进行强制 make

5. 使用 make install 进行 Nginx 的安装,这里会安装在 /usr/local/nginx 目录下

6. 编辑默认配置文件,使用命令 “sudo vi /usr/local/nginx/conf/nginx.conf” ,在文件里面加上依据”daemon off”,禁用 daemon。

6. 进入”~/Desktop/Learn/nginx/nginx-1.0.14”目录,然后运行如下命令“sudo gdb ./objs/nginx”

7 在 gdb 界面下输入命令 r。发现界面停止了,连提示符都没有了,这是因为我们取消了 nginx 的 daemon 运行模式,现在 nginx 已经接管了控制终端,输入 CTRL+C即可。按下中断键,你会发现类似“Program received signal SIGINT, Interrupt. 0xb7fff424 in __kernel_vsyscall ()”的字样,这就是退出了nginx,现在你又回到了 gdb 的终端了,接下来你就可以打个端点,然后测试下了。

8 到这里基本上算是可以调式了,不过具体怎么调式,调式什么,那将由你来决定。

参考地址1. 利用gdb调试nginx

参考地址2 nginx模块_使用gdb调试nginx源码

参考地址3 Nginx学习之十四-GDB调试Nginx初试

Comments