我想在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,但该项目并没有干净利落地导入。由于项目的复杂性和我目前的时间尺度,我现在不能考虑升级为解决方案。
答案 0 :(得分:10)
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的值上,你应该没问题。