设置指针值的条件断点

时间:2015-05-04 20:49:08

标签: pointers gdb conditional-statements breakpoints

在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.

有人知道为什么会出现段错误吗?

2 个答案:

答案 0 :(得分:0)

这是一个非常不寻常的错误消息:

  

无法从内存中读取有效的目标文件图像。

我认为你的可执行文件可能有问题。 file a.out说什么?

答案 1 :(得分:0)

无论是什么导致&#34;无法从内存中读取有效的目标文件图像&#34;消息,我认为你的意思是将数组i初始化为所有NULLS

int *i[10] = { 0 };

由于设置了局部变量j但未使用,因此必须使用-O0构建代码。以下是修改后的代码在我的机器上的工作方式:

t.cc

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