作者:yangdawen1985_156 | 来源:互联网 | 2014-05-28 09:40
在修改nginx源码中学习到了如何gdb调试nginx代码,看运行方式,设置nginx源码运行断点,在断点处打印对应的变量的结构或者属性值。下面说说如何实现gdb调试nginx,我是在linux下调试的首先配置nginx安装程序找到nginx/auto/cc/conf文件,用vim或者什么打开
在修改
nginx源码中学习到了如何gdb调试
nginx代码,看运行方式,设置nginx源码运行断点,在断点处打印对应的变量的结构或者属性值。下面说说如何实现gdb调试nginx,我是在linux下调试的
首先配置nginx安装程序
找到 nginx/auto/cc/conf 文件,用vim或者什么打开,到第八行
找到:ngx_compile_opt="-c"
更改为: ngx_compile_opt="-c -g"
然后进行编译安装
./configure --user=www --group=www --prefix=/nginx
--add-module=../ngx_cache_purge-1.2 --with-pcre
--with-http_sub_module --with-http_stub_status_module
--with-http_ssl_module
这里的user和group 还有prefix是自己定义的
make 后确认一下,调试模式是否已经配置ok
查看 vim objs/Makefile 文件大概332行 发现
330 objs/ngx_modules.o: $(CORE_DEPS) \
331
objs/ngx_modules.c
332 $(CC) -c -g
$(CFLAGS) $(CORE_INCS) \
333
-o objs/ngx_modules.o \
已经有 $(CC) -c -g "-g" 的配置,这说明配置成功了。
makeinstall
安装完毕后,我们看nginx的配置文件/nginx/conf/nginx.conf
看这个 daemon off; 配置,如果前面有# ,则使用下面的多线程配置
worker_processes 2;
worker_cpu_affinity 01 10;
如果没有#则是单进程模式运行。
我们用gdb调试,可以说有三种方式
在单线程模式下
1.运行 gdb /nginx/sbin/nginx ,进入后 输入 r (也就是run) 进入了gdb调试模式
2.或者./nginx/sbin/nginx 然后查询 对应的进程号 gdb p 进程号
在多线程下
3. ./nginx/sbin/nginx 查询对应的所有的进程号 并进行多个窗口打开,每个窗口独立gdb p 进程号
进入调试模式后,可以设置断点,继续监听等
这就是gdb调试nginx的简单操作