在学习优秀的源代码时是 少不了源码的跟踪与调试,它不仅是我们解决程序bug的有效途径 也是我们理解、学习优秀源码的有效途径。
本文主要介绍一些源码调试的方法,并结合Nginx 源码进行示例。
1, 利用GDB调试
a,首先你应该熟悉 GDB 调试的一些基本命令(不熟悉的移步 至 用GDB调试程序 ,熟悉step,run,break,list,info,continue等命令)。
b, 下载nginx 源码,这里使用nginx-1.0.14,解压文件。其中auto文件夹里包含了configure 运行时的各种命令集合,src是源码。为了利用
GDB调试Nginx,需要在生成Nginx程序时把 -g 编译选项打开。我们需要修改 auto/cc/conf 文件 把 ngx_compile_opt="-c" 加上 -g 选项
变为 ngx_compile_opt="-c -g", 下一步执行configure命令: sudo ./configure ,然后运行命令:vim objs/Makefile 确认一下-g参数是
否加上了。如下图。
-g 编译选项已打开,然后执行命令: sudo make .(如果之前已经执行过make,那么第二次make时 需要 确保能够重新编译,此时可以通过
刷新所有源文件时间戳,间接达到重新编译出一个新的Nginx可执行程序,命令为: find . -name "*.c" | xargs touch ), 好了,Nginx编译成功。
c, 启动 nginx ,在objs目录下执行命令:sudo ./nginx ,成功运行nginx后执行命令: ps -ef | grep nginx, 查看nginx的master及worker进程的PID,
如果对nginx 工作进程 2177进行gdb调