使用GDB查找函数对应/调试的内存地址

时间:2016-04-07 15:50:58

标签: c++ c unix gdb

我有这个基本程序:

int initfunc(int *array, int len) {
  int i;
  for(i=1; i <= len; i++) {
    array[i] = i;
  }
 return 0;
}

int main(int argc, char* argv[]){

  int*  myarray=0;
  initfunc(myarray,10);
}

首先,我试图找出GDB中的命令,找出存储的主存储器地址。

而且我的错误是在第4行(array [i] = i),我试图弄清楚我需要做些什么来让它运行。我的教授编写了这个程序,所以我使用这些指针可能并不是编写这个基本程序的好方法。我只需要一些见解,因为我的指针并不太好。

2 个答案:

答案 0 :(得分:0)

在编译之前,必须使用-g作为执行文件的保存符号链接。

如果您使用gdb a.out,则会收到错误消息:

  

从TEMP读取符号...(未找到调试符号)...完成。

但如果你使用g++ -g test.cpp,现在gdb会告诉你:

  

从a.out中读取符号...已完成。

现在你可以使用command-gdb

看到这个:How to use GDB to find what function a memory address corresponds to

答案 1 :(得分:0)

我明白了,谢谢你的洞察力。我只是在GDB中使用断点来计算函数的内存分配。我没有提到我在makefile中使用了-g,所以这部分已经完成了。此外,阵列的内存分配不存在,这解决了问题!干杯