gdb中的条件显示

时间:2011-06-17 21:47:53

标签: c++ debugging gdb

我正在使用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是指针数组。

2 个答案:

答案 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;