是否可以在Visual Studio 2013中设置多个条件断点?

时间:2015-05-27 07:59:23

标签: c++ winapi visual-studio-2013

有没有人知道是否可以在Visual Studio 2013(C ++)中的特定行上设置多条件断点?

我正在尝试使用'&&'但它没有奏效。我也无法在MSDN上找到答案。

我想设置的断点位于WindowProc中,我想设置的条件是 - message = WM_MOUSEMOVE,WPARAM = MK_LBUTTON

感谢先生,伊戈尔。

2 个答案:

答案 0 :(得分:2)

WM_MOUSEMOVE是一个宏定义,在编译期间由编译器在源代码中替换。调试器是未知的,因此您不能在断点条件表达式中使用它;改为使用显式数字常量。

顺便说一句,你知道你使用了运算符“=”,与“==”相同......?

答案 1 :(得分:1)

允许使用&&并且应该有效。而且,允许使用许多常见的C ++表达式。 This页面列出了不允许的内容和内容。

请注意,使用这种断点会大大降低应用程序的速度。到调试不​​再可行的程度。这可能会让您相信&&是不允许的。要克服这个特殊问题,您可能需要使用这样的结构:

//untested code
#ifdef _DEBUG
if(condition a && condition b)
{
    //either output something (option A)
    std::cout << "condition a and b are true"
    //or create a nop statement (option B)
    __nop(); //and set a breakpoint
    //or create a 'nop statement' with compiler warning (option C)
    int breakpoint = 0;
}
#endif

这将产生更好的性能。

由于此代码仅在您在调试中进行编译时编译,因此您可以保留此位代码(因此选项B将是最佳的)。如果您想要提醒您删除调试子句,则选项C可能是您想要的方式。因为这会产生variable breakpoint is declared but never used警告。正如borisbn所说的那样。

如果你使用这个语句很多,将它包装到预编译器宏中可能是最有用的。