C++ 添加调试代码,仅在调试时运行

Wal*_*ter 5 c++ debugging compiler-flags c-preprocessor

正如问题所解释的那样:我想添加一些仅在程序附加到调试器时运行的调试代码。我想这个flagpre-processor变量对于每个编译器都会不同......

就我而言,我将 Microsoft Visual Studio 2010 与 C++ 一起使用。

我还在家里的另一台运行 Ubuntu 10.4 和 C++ 的计算机上使用 Eclipse。

Leo*_*Hat 4

这个问题可能意味着以下两件事之一:

  1. 仅基于构建配置运行的代码(例如发布与调试)
  2. 仅在附加调试器时运行的代码

基于构建配置

这可以通过使用与编译器相关的预处理器宏来解决(例如,Win32 CRT 的 _DEBUG)。

基于是否附加调试器

这可以通过几种不同的方式来解决。

全局布尔变量

我发现的一种方法是定义一个初始化为 的全局布尔变量false,如下所示:

bool gDebug = false;
Run Code Online (Sandbox Code Playgroud)

当我使用调试器附加到代码时,中断代码并gDebug通过true监视”窗口覆盖。然后,您可以添加在设置为 true 时有条件运行的代码:

if (gDebug)
{
    // Debugger is attached, so run this code
    // ...
}
Run Code Online (Sandbox Code Playgroud)

注册表项

定义一个DWORD初始化为 的注册表值,但您可以通过注册表编辑器0覆盖。1

然后,您可以将此注册表值设置为调试代码的条件。1. 这可能是一个更好的替代方案,因为您可以从外部控制该值,而无需中断调试器以在适当的时间设置全局变量。