繁体   English   中英

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

[英]How to add a conditional breakpoint in Visual C++

我想在 VC++ Express 2005 中为我的代码添加断点条件,以便只有在局部变量满足指定条件时才会触发断点。 例如

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:错误:成员 function 不存在

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

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

VS 确实有一些微观评估引擎——在变量观察 windows、立即 window、断点条件等中。我永远找不到像样的文档。 据我所知,他们对愿意调用的方法很挑剔,他们对访问限制也不敏感。
因此,您可能可以从

test_list.Length() > 0  

类似于

test_list.m_nLength > 0

(或任何您的私人长度变量)。

(编辑)刚刚发现这个 msdn 页面解释了调试器可以处理和不能处理的表达式。 所以首先,确实——

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

其次,我对未能评估 'Length()' 的猜测 - 它可能是内联的:

'除非 function 作为正常的 function 出现至少一次,否则调试器表达式不能调用内部或内联 function。

使用 DebugBreak(); function:

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(expression)

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

据我所知,断点中的条件不能调用方法。 所以,你需要做的是事先计算好长度。 像这样的东西。


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 的值上放一个条件断点,你应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM