在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.
有人知道为什么会出现段错误吗?
答案 0 :(得分:0)
这是一个非常不寻常的错误消息:
无法从内存中读取有效的目标文件图像。
我认为你的可执行文件可能有问题。 file a.out
说什么?
答案 1 :(得分:0)
无论是什么导致&#34;无法从内存中读取有效的目标文件图像&#34;消息,我认为你的意思是将数组i
初始化为所有NULLS
int *i[10] = { 0 };
由于设置了局部变量j
但未使用,因此必须使用-O0构建代码。以下是修改后的代码在我的机器上的工作方式:
#include <iostream>
using namespace std;
int main () {
int *i[10] = { 0 };
int *j = NULL;
int k;
i[4] = new int;
*i[4] = 8;
for (k=0; k < 10; k++) {
j = i[k];
}
return 0;
}
$ gcc -O0 t.cc -o t
$ gdb -q t
(gdb) b 13 if j && *j == 8
(gdb) run
Breakpoint 1, main () at t.cc:13
13 j = i[k];