思考
- 如何在一个大型项目中进行调试?
- 如何在一个大型项目中进行单元模块校验,如单独写个函数去验证某个数据结构的相关操作等等?
- 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类型
加桩调试
简单来说,在一个大型项目中写一个函数来验证某个极小的单元模块,比如验证某个加密函数是否功能正常等
前提要求
- 尽量不影响整体功能
- 充分利用已有框架,即不要用抽取部分源文件后去重新编写main函数(你会发现特别麻烦,且文件依赖、部分宏抽取等等都会特别复杂!)
-
思路
首先编写测试代码需要一个main函数,但又不去自己重新写——即:使用大型项目的main函数
- 接着要符合最简单原则,测试中main只需要包含test函数即可,但大型项目不能——即:简化出大型项目main中的流程
- 筛选出大型项目中必须要做的初始化流程——即:保证大型项目衍生的基础命令行、编译脚本等工具有效
- 截断大型项目中的核心功能——即:单个函数调试时不需要进入核心功能,即节省程序运行时间又简化流程
最后保证调试结果打印且程序退出——即:可以直接终端打印printf,或写入日志文件,且test函数中添加exit保证程序退出即可
技巧
案例:测试Nginx字符串结构ngx_str_t的相关功能
步骤在ngx_string.h中添加测试函数声明(注意:声明和定义分开,否则编译出现问题!)
- 在ngx_string.c中添加测试函数定义
- 在nginx.c中添加测试函数使用(位置是重点!)
- 在nginx.conf中修改配置(主要是不让nginx后台运行)