nginx的gdb调试


gdb是Linux系统上调试程序的利刃。为了gdb 调试nginx ,在编译时,需要选择--with-debug选项,开启debug模式,其次需要修改 Makefile文件。

vi objs/Makefile

增加  -O0 和 -g 选项;-O0代表不进行优化,-g代表调试模式
CFLAGS= -pipe -W -wall -Wpointer-arith -Wno-unused-parameter -g -O0


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


修改配置文件,在全局区增加如下:

daemon off; #关闭守护进程,使之在前台工作

master_process off; #关闭主进程,时只有worker进程工作

error_log  logs/error.log debug; #记录debuug 调试信息

这就可以了,启动调试。

gdb  ./nginx

设置断点、运行

二、设置nginx为前台master进程调试模式


修改配置文件,在全局区增加如下:

daemon off; #关闭守护进程,使之在前台工作


master_process on; #关闭主进程,时只有worker进程工作

error_log  logs/error.log debug; #记录debuug 调试信息


这就可以了,启动调试。
gdb  ./nginx


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


修改配置文件,在全局区增加如下:

daemon on; #关闭守护进程,使之在前台工作

master_process on; #关闭主进程,时只有worker进程工作

error_log  logs/error.log debug; #记录debuug 调试信息



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


Reading symboles from /usr/local/nginx/sbin/nginx...done.
(gdb) run
Starting program:/usr/local/nginx/sbin/nginx
[Thread debugging using libthread_db enable]


Program exited normally.
(gdb)


这种情况真正退出的只是nginx的父进程,而fork出来的进程gdb 没有跟到,所以出现了这个情况。这种情况下,可以进行如下操作:
(gdb) set follow-fork-mode child #设置调试子进程,父进程不受影响(相对应的是parent)
(gdb) b ngx_process_events_and_timers

如果想打印中间的某个变量可以用 :p 变量

gdb日志保存在:

error_log  logs/error.log debug;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值