思考

  1. 如何在一个大型项目中进行调试?
  2. 如何在一个大型项目中进行单元模块校验,如单独写个函数去验证某个数据结构的相关操作等等?
  3. Nginx调试技巧是否可以进行举一反三,或直接或变通后灵活应用到其它大型项目,比如Redis等?

    参考

    https://zhuanlan.zhihu.com/p/47236996
    https://blog.csdn.net/alpha_love/article/details/109107114
    https://zhuanlan.zhihu.com/p/50976915
    https://www.jianshu.com/p/51b726b56e2f
    https://blog.csdn.net/qq_27788177/article/details/114300646
    https://www.nginx.org.cn/article/detail/346

    类型

    加桩调试

    简单来说,在一个大型项目中写一个函数来验证某个极小的单元模块,比如验证某个加密函数是否功能正常等

前提要求

  1. 尽量不影响整体功能
  2. 充分利用已有框架,即不要用抽取部分源文件后去重新编写main函数(你会发现特别麻烦,且文件依赖、部分宏抽取等等都会特别复杂!)
  3. 能简单就尽可能简单

    思路

  4. 首先编写测试代码需要一个main函数,但又不去自己重新写——即:使用大型项目的main函数

  5. 接着要符合最简单原则,测试中main只需要包含test函数即可,但大型项目不能——即:简化出大型项目main中的流程
  6. 筛选出大型项目中必须要做的初始化流程——即:保证大型项目衍生的基础命令行、编译脚本等工具有效
  7. 截断大型项目中的核心功能——即:单个函数调试时不需要进入核心功能,即节省程序运行时间又简化流程
  8. 最后保证调试结果打印且程序退出——即:可以直接终端打印printf,或写入日志文件,且test函数中添加exit保证程序退出即可

    技巧

    案例:测试Nginx字符串结构ngx_str_t的相关功能
    步骤

  9. 在ngx_string.h中添加测试函数声明(注意:声明和定义分开,否则编译出现问题!)

image.png

  1. 在ngx_string.c中添加测试函数定义

image.png

  1. 在nginx.c中添加测试函数使用(位置是重点!)

image.png

  1. 在nginx.conf中修改配置(主要是不让nginx后台运行)

image.png