如何在Visual C ++中添加条件断点

时间:2009-03-18 10:34:44

标签: c++ debugging visual-c++ visual-studio-2005 breakpoints

我想在VC ++ Express 2005中为我的代码添加断点条件,以便断点仅在局部变量满足指定条件时触发。 e.g。

bool my_test(UIDList test_list) {
    foo(test_list);
    bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
    print(test_list);
}

右键单击我的断点并选择“条件...”我找到了一个似乎可以执行我想要的对话框,但是我尝试在文本字段中输入的任何内容都会导致以下错误:

  

无法评估断点   条件:CX0052:错误:成员   功能不存在

我尝试了帮助文档,但找不到答案。我希望有VC ++经验的人能够指出我正确的方向......

我以前曾尝试升级到更新版本的VC ++ Express,但该项目并没有干净利落地导入。由于项目的复杂性和我目前的时间尺度,我现在不能考虑升级为解决方案。

3 个答案:

答案 0 :(得分:10)

VS确实有一些微评估引擎 - 在可变监视窗口,即时窗口,断点条件等等。我永远找不到合适的文档。据我所知,他们对于他们愿意打电话的方法很挑剔,他们对访问限制也不敏感。
所以,你可以从

重新描述你的状况
test_list.Length() > 0  

类似

test_list.m_nLength > 0

(或任何你的私人长度var)。

(编辑)刚刚找到this msdn page来解释调试器可以和不能处理的表达式。首先,indeed -

  

'调试器可以访问所有类   成员无论访问控制如何。   您可以检查任何类对象   成员,包括基类和   嵌入式成员对象。'

第二,我猜测未能评估'长度()' - 可能是内联的:

  

'调试器表达式无法调用   内在或内联函数,除非   该功能至少出现一次   一个正常的功能。'

答案 1 :(得分:8)

使用DebugBreak();功能:

bool my_test(UIDList test_list) {
    foo(test_list);
    if (bar(test_list) /* or whatever check :) */) // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
        DebugBreak();
    }
    print(test_list);
}

或者你总是可以使用assert(表达式)

bool my_test(UIDList test_list) {
    foo(test_list);
    bar(test_list);
    assert(test_list.Length() > 0); // will break here
    print(test_list);
}

答案 2 :(得分:4)

据我所知,断点中的条件无法调用方法。所以,你需要做的是事先计算长度。这样的事情。


bool my_test(UIDList test_list) {
 foo(test_list);
 int i = test_list.Length();
 bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0
 print(test_list);
}

在这里把一个条件断点放在i的值上,你应该没问题。