【发布时间】:2015-05-04 20:49:07
【问题描述】:
在 gdb 中,如何根据指针的值设置条件断点,记住我必须在取消引用指针之前检查指针是否为空?
这是我正在尝试调试的代码示例:
#include <iostream>
using namespace std;
int main () {
int *i[10];
int *j = NULL;
int k;
i[4] = new int;
*i[4] = 8;
for (k=0; k < 10; k++) {
j = i[k];
}
return 0;
}
我在“j=i[k]”行设置了条件断点,但出现了段错误:
(gdb) b 14 if j && *j == 8
(gdb) r
Starting program: /nfs/blahblah/a.out
Failed to read a valid object file image from memory.
Program received signal SIGSEGV, Segmentation fault.
有人知道为什么会出现段错误吗?
【问题讨论】:
-
如果你只输入
b 14,它会停在哪一行?对我来说(gcc 4.8.2),它停在第 16 行,return 0,因为没有为第 14 行生成代码。 -
我无法重现段错误。您使用的是什么编译器和操作系统版本?
-
我尝试将条件断点(与您问题中的断点相同)放在 b 13 但没有段错误。
标签: pointers gdb conditional-statements breakpoints