前段时间我在SO上找到了有关此功能的信息,但该主题与 Visual Studio的隐藏功能(2005-2008)?,我再也找不到了。

我想使用这样的东西:

#ifdef DEBUG
#define break_here(condition) if (condition) ... // don't remember, what must be here
#else
#define break_here(condition) if (condition) return H_FAIL;
#endif
//...
hresult = do_something(...);
break_here(hresult != H_OK);
//...
var = do_other_thing(...);
break_here(var > MAX_VAR);

它必须表现得像一个错误的断点。这就像断言,但没有对话,更轻量级。

我不能在这里使用普通断点,因为我的模块是几个项目的一部分,可以在几个VS解决方案中进行编辑。这导致在一个解决方案中设置的断点在源代码中移位,当在其他解决方案中编辑代码时。

有帮助吗?

解决方案

查看 DebugBreak

  

导致在当前进程中发生断点异常。这允许调用线程通知调试器处理异常。

示例:

 var = do_other_thing(...);
 if (var > MAX_VAR)
      DebugBreak();

其他提示

也许这应该有所帮助:如何添加Visual C ++中的条件断点

我忘了,我也需要ARM构建,其中一个不是在MS Visual Studio中编译的:)

此外,我最好不要在我的模块的库版本中链接其他代码。是否需要包含“winbase.h”。对于DebugBreak()是一个“坏事”它,更好的是有一些内在的。但这不是什么“坏事”,因为最终版本中没有断点:)

借助 crashmstr 的回答,我找到了 DebugBreak()的替代品。现在我使用以下结构:

#ifdef _DEBUG

    #ifdef _MSC_VER
      #ifdef _X86_
        #define myDebugBreak { __asm { int 3 } }
      #else
        #define myDebugBreak  { __debugbreak(); } // need <intrin.h>
      #endif
    #else
      #define myDebugBreak { asm { trap } } // GCC/XCode ARM11 variant
    #endif

#else

      #define myDebugBreak

#endif

#define break_here(condition) if (condition) { myDebugBreak; return H_FAIL; }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top