当前位置 : 首页 » 文章分类 :  开发  »  GDB调试Nginx

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命令

阅读
563
阅读预计3分钟
创建日期 2015-03-14
修改日期 2018-06-26
类别
百度推荐