【问题标题】:Using GDB to find what memory address a function corresponds to/ debugging使用GDB查找函数对应的内存地址/调试
【发布时间】:2016-04-07 15:50:58
【问题描述】:

我有这个基本程序:

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 中的命令是什么来查找 main 存储在哪个内存地址中。

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

【问题讨论】:

  • 如果你编译时打开调试符号,gdb 会直接显示它...
  • @EugeneSh。 , 你是对的哥们。如果您说 GDB 开箱即用地告诉我错误是什么,因为我知道它在第 4 行。指针是为什么它抛出它是我的假设,我只是想清楚它为什么这样做。但是,如果您开箱即用地告诉我 GDB 告诉我函数的内存地址是错误的,因为它告诉我返回错误的函数的内存地址,这不是我需要的,我需要内存另一个特定功能的地址。
  • 您想查看array 的值(它指向的位置),而不是函数的地址。
  • 两件事:1)你没有为myarray分配任何内存,所以你尝试写入它是UB。 2) 一旦你分配了内存,C 指针就是 0-indexed;你的for 循环应该是i = 0; i &lt; len; i++
  • @mch,好吧,我只需要找出分配给函数 main 的特定内存分配,但我不确定如何。我在它上面设置了一个断点,它返回地址,所以我猜这是怎么做的?我不确定是否有更直接的命令。

标签: c++ c unix gdb


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在编译之前,您必须使用-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

    【讨论】:

    • if you use gdp a.out gdp 是什么?
    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2012-07-02
    • 2012-08-13
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多