c++ - Visual C++ 条件调试

标签 c++ visual-studio debugging c-preprocessor conditional-compilation

我正在尝试设置一个带有条件调试的项目。我想要的是有一个宏debug,当我在 Debug模式下运行时,它被#defined 到某种printf/cout/anything,而当我在生产模式下运行时,它被#defined 到null 语句。我该怎么做:

我已经尝试使用宏 _DEBUG 但无论我在哪种模式下运行,我总是看到我的参数打印:

struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
    #define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
    #define debug(...) // Just strip off all debug tokens
#endif

主要是:

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int a=1,b=2,c=3;
    debug(a,b,c);
    cin>>a;
}

如果有帮助,我正在使用 Visual Studio 2012

最佳答案

您示例中的代码是正确的。问题在于定义 _DEBUG 的来源。在正确的设置中,它应该来自/不来自您的 MSVC 项目,而不是来自其他任何地方。在这种情况下,根据构建类型,您将获得预期的结果。

很可能您已在自己的代码或您包含的某个 header 中的某处定义了它。

您的帖子中没有足够的信息来推断 _DEBUG 的真正来源。

在 Debug模式下,来自 MSVC 的定义如下所示:

#define _DEBUG

这意味着即使在 DEBUG 构建中你也不应该看到任何东西。看到输出后,这意味着 defn 存在并且不为空。这个定义不是来自 MSVC。

关于c++ - Visual C++ 条件调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020005/

相关文章:

c++ - 为所有字符串类型重载模板函数

c++ - 使用 c++(SDL2) 的突破游戏 - 试图让球改变轨迹但有一些问题

c++ - 使用邻接矩阵的深度优先算法无法正常工作

c++ - 当我在另一台机器上运行我的应用程序时缺少 DLL 文件?

visual-studio - 错误的Visual Studio发布

android - Proguard 在某些构建配置中变灰

c++ - 基于 CDialog 的应用程序是否应该设置 AfxGetApp()->m_pMainWnd

javascript - 如何调试 Cordova 的钩子(Hook)?

c++ - 了解 C++ 程序的 GDB 语法

node.js - nightwatch - 使用 Node.js 和 Chrome 进行调试