【问题标题】:How to use #ifdef _DEBUG on Linux?如何在 Linux 上使用#ifdef _DEBUG?
【发布时间】:2012-01-27 14:24:36
【问题描述】:

我对 Linux C++ 上的 _DEBUG 宏有疑问。 我尝试使用这样的东西:

#ifdef _DEBUG
cout << "Debug!" << endl;
#endif

但是当我在 IDE 中选择调试时它不起作用。但是它适用于Windows。 我在 Linux 上使用 Eclipse IDE 进行 C++ 编码。

【问题讨论】:

  • 您必须进入项目属性并查看 Eclipse 为发布和调试变体中的预处理器标志设置了什么。也许自己添加_DEBUG。
  • 你在windows中使用过eclipse吗?
  • 添加通常的习惯,至少用&lt;assert.h&gt;和标准的assert宏,是在你不想调试时定义NDEBUG
  • @L7ColWinters,我没有。

标签: c++ linux debugging eclipse-cdt


【解决方案1】:

在 Windows 上,您可能使用的是 Visual Studio,它会在调试模式下构建解决方案时自动定义 _DEBUG 符号。符号通常在调用编译器时定义,然后在预处理器阶段使用。

例如,如果您通过命令行使用 GCC,并且由于正在处理已建立的代码库而想要重新使用 _DEBUG 符号,您可以使用 -D 参数通过以下方式定义它命令行。

#include <iostream>
int main() {
  std::cout << "Hello world!\n";
#ifdef _DEBUG
  std::cout << "But also Hello Stack Overflow!\n";
#endif
  return 0;
}

用下面的命令行编译它

 g++ -D _DEBUG define.cpp

会给出以下结果

Hello world!
But also Hello Stack Overflow!

不过,对于 eclipse cdt,您最好的选择可能是项目属性中的 modify the paths and symbols properties

【讨论】:

    【解决方案2】:

    如果您使用 cmake,请将以下内容放在您的顶级 CMakeLists.txt 文件中

    set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG "_DEBUG")
    

    发现于CMake Mailinglist

    【讨论】:

      【解决方案3】:

      #define _DEBUG 放在你拥有这个sn-p 的地方以北的某个地方,或者你的项目设置中。

      【讨论】:

      • 我强烈建议不要将它放在任何 c++ 文件中。项目设置没问题,但代码本身不行。
      • @MooingDuck:是的,没错。就我个人而言,我不会使用 MSVC 或大量使用的 STL,而是坚持常用的 NDEBUG。
      • @user1173593: 你想要#define _DEBUG... 阅读一些 MSVC 文档以供您的编译器或 STL 集合使用。
      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2011-10-02
      • 2013-02-06
      • 2011-01-18
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多