2016-09-15 50 views
0

我已经用#ifdef DEBUG条件语句编写代码来在代码块中打印cout语句。我的问题是:如何查看DEBUG条件语句的输出?

  1. 所以这些条件调试只会出现在条件正确吗?
  2. 如果是的话当我调试代码时如何查看代码块中的输出?
+2

如果您使用预定义宏DEBUG定义的代码,代码将在您的编译程序中。正如你然后使用普通的'std :: cout'输出,输出将与其他输出到'std :: cout'。 –

+0

试过没有解决。我必须在编译器中设置这个标志吗?我在网上看到几个关于使用-DDEBUG –

+0

的在线提示。​​这就是通常在从命令行构建时定义调试宏的方法。在IDE中,通常会有一些项目构建设置,您可以在其中设置预处理器宏。查找[在一些文档中](http://wiki.codeblocks.org/index.php/User_documentation)。 –

回答

0

我不确定码块,但在Visual Studio中,您可以选择是否要构建程序的调试版本或发行版本(或您定义的任何其他版本)。这有效地做的是它将标志DEBUG设置为true。而且您不需要手动定义变量。无论如何,你可以使用你自己的定义。

在调试版本中,#ifdef DEBUG中的任何内容也将在发布版本中编译,而这些代码块将被跳过。要从调试中获取信息,可以像这样定义一个宏调试打印。

#define DEBUG_MODE 1 // Or 0 if you dont want to debug 

#ifdef DEBUG_MODE 
#define Debug(x) std::cout << x 
#else 
#define Debug(x) 
#endif 

然后调用你的Debug(someVariable);如果您构建调试版本,则可以在控制台中获得输出,否则不会发生任何事情。

0

正如其他评论/答案中所述,您可以定义一个宏,例如DEBUG(message),仅用于在调试版本中打印调试消息。不过,我建议你使用NDEBUG而不是DEBUG来这样做。 NDEBUG是一个标准化的预定义宏,如果这是您的意图,则由编译器在发布版本中自动定义。这样使用它:

// #define NDEBUG ==> not needed, this macro will be predefined by compiler in release build 

#ifdef NDEBUG   // release build 
# define DEBUG(msg) 
#else     // debug build 
# define DEBUG(msg) std::cout << msg 
#endif 

int main(void) 
{ 
    DEBUG("this will be printed to console in debug build only\n"); 
    return 0; 
} 
+0

语句在控制台上以正常模式和调试模式打印。 –