在C++中使用DEBUG宏的原因是什么?

Der*_*rek 9 c++ debugging macros

我正在研究由其他人构建的C++程序,并且看到了很多DEBUG的用法

#ifdef DEBUG
    cout << "Value is "<< value << endl;
#endif
Run Code Online (Sandbox Code Playgroud)

我自己仍然在学习过程中成为一名富有的C++程序员,我主要使用Visual Studio和断点进行调试.所以我想知道,如果我能够逐步调试代码来调试值,还有其他原因可以使用这些宏吗?

尝试谷歌但没有找到太多有用的页面.

谢谢.

Luc*_*ore 10

有时您不想单步执行整个代码,只需检查终端中的输出即可.

如果使用已DEBUG定义的代码编译代码(可能在调试版本中),则会看到输出.对于发布版本,您不需要.如果你去项目设置 - >配置属性 - > C/C++ - >预处理器 - >预处理器定义,你会看到DEBUG为调试版本定义了它,但它不是为了发布.(我实际上有_DEBUG)

想象一下,你有一个巨大的功能,你感兴趣的是在第1000行(它的旧代码,不能改变它).您是否愿意逐步完成所有混乱的遗留代码或在关键点处获得有用的调试声明?您是否希望控制台告诉您哪里出了问题,或者return在失败位置的237个语句中设置断点?

  • 我想补充一点,`_DEBUG`是特定于Visual C++的.检查[在Visual C++中启用调试功能](http://msdn.microsoft.com/en-us/library/5bb575z2.aspx?ppud=4) (3认同)

Vik*_*pov 6

在进行调试时,通常会在屏幕上转储一些中间值.视觉调试器并不总是有帮助,因为你浪费了很多时间用鼠标操作.

"文本模式调试"和日志记录的需求也经常来自嵌入式系统体验,在这种体验中,您没有太多的视觉辅助,而您所能做的就是将一两个字节转储到串行端口或类似的东西.当您习惯于快速查找关键调试点时,只需插入一些打印代码,其值将检查程序的正确性.

当您的项目在调试模式下编译时,"DEBUG"宏由MSVC++编译器定义.当你制作Release版本时,所有对最终用户来说实际上无用的代码都被预处理器"剥离"了.

典型的片段

#ifdef DEBUG
Some code
#endif
Run Code Online (Sandbox Code Playgroud)

如果未定义DEBUG,则由预处理器删除.