c++ debug

逻辑错误用log,内存错误用gdb,单元测试用gtest,编译器用clang,log框架用log4cplus,性能热点用gprof,这样就没有搞不定的bug

https://www.zhihu.com/question/26905808?sort=created&page=1


### C++ DEBUG 宏定义及使用方法 #### 使用 `-DDEBUG` 编译选项 编译程序时可以通过命令行参数来控制是否启用 `DEBUG` 宏。如果希望激活调试功能,则可以在编译指令中加入 `-DDEBUG` 选项;反之则不需要指定此标志,从而简化最终发布的二进制文件[^1]。 ```bash g++ main.cpp -o program -DDEBUG ``` #### 条件编译实现调试输出开关 为了方便管理和减少冗余代码,在实际开发过程中通常会创建自定义的宏来进行条件性的日志记录操作。下面展示了一个典型的例子,其中根据是否存在 `DEBUG` 符号决定是否执行相应的打印语句: ```c++ #include <stdio.h> // 如果定义了DEBUG,则使能调试信息输出;否则禁用之 #ifdef DEBUG #define DBGprint(...) printf(__VA_ARGS__) #else #define DBGprint(...) #endif int main(void) { int i, sum; for (i = 1, sum = 0; i <= 5; ++i) { sum += i; // 调试期间显示累加过程中的中间结果 DBGprint("sum += %d is %d\n", i, sum); } printf("total sum is %d\n", sum); return 0; } ``` 这段代码展示了如何通过预处理器指令灵活切换不同版本的行为模式——即在开启调试的情况下能够看到详细的运行状态报告,而在正式环境中这些额外的信息会被自动忽略掉[^2]。 #### 扩展版错误处理机制 除了基本的日志输出外,还可以进一步增强宏的功能以适应更复杂的场景需求。例如,这里提供了一种带有位置标记(文件名、行数以及当前函数名称)的错误提示方式,并且允许传递可变数量的参数给格式化字符串: ```cpp #pragma once #include <stdio.h> #define DEBUG 1 #if (DEBUG == 1) #define print_error(fmt, ...) \ { \ printf(fmt "\nsome error message.\n", __VA_ARGS__); \ printf("%s(%d)-<%s>.\n\n",__FILE__,__LINE__,__FUNCTION__); \ } #else #define print_error(fmt, ...) #endif ``` 上述片段不仅实现了基于环境配置的选择性报错逻辑,还加入了上下文信息以便于追踪问题源头,这对于大型项目的维护尤其有用处[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值