GDB调试Nginx
gdb调试nginx笔记
网上说要在ccms-nginx/NGINX/NGINX-1.6.2/develop/auto/cc/conf文件中ngx_compile_opt=”-c -g”加上-g才有gdb信息。
方法一:启动nginx后attach到进程上
启动源码中的nginx
为了gdb调试,需要启动源码目录下的nginx,
进入编译nginx的源码目录ccms-nginx/NGINX/NGINX-1.6.2/develop$ objs/nginx -c /home/masikkk/hls/nginx.conf
如果是先启动nginx,再gdb attach到进程上,可以指定配置文件启动
如果是以gdb nginx启动nginx,则不能指定配置文件,还是使用默认的/usr/local/sms/conf/nginx.conf
attach到nginx worker进程ps -ef | grep nginx
查看nginx的master和worker进程号,
一般和推流播放相关的任务都是worker进程执行的,比如worker进程号是10624
在源码的develop目录中执行$ gdb objs/nginx 10624
或者在任意目录执行:$ gdb -p 10624
或$ gdb attach 10624
看到如下信息:
Reading symbols from /home/masi/ccms-nginx/NGINX/NGINX-1.6.2/develop/objs/nginx...done.
Attaching to program: /home/masi/ccms-nginx/NGINX/NGINX-1.6.2/develop/objs/nginx, process 10624
说明attach成功,后面的几个no debugging symbols found可以不用管它
attach后进程就被暂停了,
可以先插入几个断点,然后输入gdb命令c(continue)继续执行
方法二:在gdb中启动nginx
(1) 在任意位置启动gdb:$ gdb
(2) 在gdb中用file命令指定nginx可执行文件:
(gdb)file /home/masi/ccms-nginx/NGINX/NGINX-1.6.2/develop/objs/nginx
Reading symbols from /home/masi/ccms-nginx/NGINX/NGINX-1.6.2/develop/objs/nginx...done.
(3) 在gdb中set args指定启动nginx的参数(即配置文件)
(gdb) set args -c /home/masi/conf/nginx.conf
(4) 设定断点
(gdb) b ngx_http_core_module.c:2734
Breakpoint 1 at 0x4713c5: file src/http/ngx_http_core_module.c, line 2734.
(5) run程序(gdb) r
gdb内打印变量提示<value optimized out>
这是因为gcc优化导致,我们可以加上CFLAGS=”-g -O0”选项强制禁用gcc的编译优化。
如何把“-g -O0”应用在nginx上可以有三种方法:
1、在进行configure配置时,按如下方式执行:# CFLAGS="-g -O0" ./configure
2、直接修改文件objs/Makefile,在其中给CFLAGS参数其加上“-g -O0”:
CFLAGS = -g -O0 -I../../../NGINX-RTMP/nginx-rtmp-module-master/develop -I../../../MODULES/develop/ngx_http_hls_tshift -I../../../MODULES/develop/ngx_http_live -I../../../MOD ULES/develop/ngx_http_billing -DNDK_SET_VAR
3、在执行make时,按如下方式执行:# make CFLAGS="-g -O0"
上一篇 SVN
下一篇 GDB命令
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: