通过调试,可以方便地定位问题,解决bug.
本文主要总结书里提到的内容,具体细节,会慢慢更新,因为细节是在慢慢阅读中经历的.
跟踪与调试,主要分了6个部分:
1. 利用GDB调试:
具体调试方法可以参考: Nginx学习之十四-GDB调试Nginx初试 ,以及<深入剖析Nginx>的作者的博客:点击打开链接
其实,通过上一节的方法,可以很方便的通过eclipse来调试代码,当然gdb通过命令行更加的灵活.
带参数,进入gdb调试:
gdb --args ./nginx -c /home/zy/code/web/nginx-1.6.2/conf/nginx.conf进去之后,就是打断点/单步调试/设置观察点等具体调试技术了.
2. 利用日志信息跟踪Nginx:
我们知道printf是小型程序的打印功能函数,但是当程序大型之后,printf就不那么灵活了. 因此大型的系统都会提供不同级别的输出控制. 比如linux内核/NS3网络仿真工具等等.在配置文件中设定日志信息的目录和级别.然后在程序里调用ngx_log_xxx()系列函数就可以了.
3. 利用strace/pstack调试程序:
通过这两个命令可以查看应用程序在运行过程中所发起的系统函数调用和动态库函数调用. 然后,pstack本身也就是一个利用gdb实现的shell脚本.
4.加桩调试:
一个单元测试的概念,比如我们写某个算法实现了一个函数,为了验证它的正确性,就需要在main函数里构造输出并打印输出这些,这些额外的测试代码就是加桩测试.并且eclipse中也可以进行加桩测试:点击打开链接
5. 特殊应用程序测试:
自己写socket通信的客户端去测试某些只有在特定情况下才会执行到的代码