刚开始把nginx安装好后,我就对其源代码产生了浓厚兴趣,试图通过加入printf函数输出自己的调试信息来查看整个nginx的运行流程。最后发现自己加入的printf根本不管用,屏幕上没有任何信息。
后来发现程序重定向了STDOUT文件符到/dev/null里了,所有看不到任何输出信息。原因找到后,我们只要把重定向函数dup2注释即可(在os/unix/ngx_daemon.c的45行左右)。
以上注释完成后,你就可以在程序的任何位置加入你自己的调试信息,方便你分析nginx源码。除了改动文件,接下来肯定要重新编译源代码。去到nginx源码根目录下,执行make,makeintall就可以获取最新的nginx可执行文件,运行启动即可看到自己所加的最新调试信息。
采取以上调试方法简单方便,易于理解。建议在调试源码时最好单进程启动,你可以看下/conf/nginx.conf文件里work_processes值是否为1,为1只是单进程。如果采取多进程启动,打印的日志势必会杂乱,对于理清程序的来龙去脉是不利的。
最后祝你调试愉快。
原文地址:http://luoshibin.blog.51cto.com/3730223/1679680