我正在使用gdb来调试一些c ++代码。目前我正在查看的代码遍历一个指针数组,指针指向某个对象的指针或NULL指针。
如果我只是display list[index]->member
,那么当list [index]为null时它会抱怨。无论如何只有当list [index]不为null时才显示该成员?我知道你可以设置条件断点(condition <bp-num> <exp>
),但我不确定它是如何帮助的。
有问题的代码是:
for (int i=0;i<BSIZE*BSIZE;i++){
if (vms[i]==target) {valid=true; break;}
}
其中vms是指针数组。
答案 0 :(得分:3)
由于display
接受任意表达式,您可以尝试类似以下display
命令:
display (list[index]) ? list[index]->member : "null"
我不确定这是否能够很好地清理你想要的东西 - 你仍然会得到一个展示,但这不会是一个抱怨。
答案 1 :(得分:0)
基本上条件是这样的:
#include <iostream>
int main() {
for (int i=0; i<10; ++i) {
std::cerr << i << std::endl;
}
}
您可以像这样调试它:
(gdb) break 5
Breakpoint 1 at 0x100000d0e: file foobar.cpp, line 5.
(gdb) condition 1 i==3
(gdb) r
Starting program: /private/tmp/foobar
Reading symbols for shared libraries ++. done
0
1
2
Breakpoint 1, main () at foobar.cpp:5
5 std::cerr << i << std::endl;