gdb中的条件显示

conditional display in gdb

本文关键字:显示 条件 gdb      更新时间:2023-10-16

我正在使用gdb调试一些c++代码。目前,我正在查看的代码通过指针数组进行迭代,这些指针要么是指向某个对象的指针,要么是NULL指针。

如果我只是display list[index]->member,当list[index]为空时它会抱怨。是否只有在list[index]不为null时才显示成员?我知道你可以设置条件断点(condition <bp-num> <exp>),但我不确定这会有什么帮助。

有问题的代码是:

for (int i=0;i<BSIZE*BSIZE;i++){
  if (vms[i]==target) {valid=true; break;}
}

其中vms是指针数组。

由于display接受任意表达式,您可以尝试以下display命令:

display (list[index]) ? list[index]->member : "null"

我不确定这是否能很好地满足你的需求——你仍然会得到一个展示,但这不会是抱怨。

基本上条件是这样工作的:

#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;