gdb声称它是哪个变量segfaults

时间:2015-12-29 13:37:02

标签: variables segmentation-fault gdb fortran memory-address

我是一名工程师,而不是代码编写者。 (来自法国,所以请原谅我有时可怜的英语)所以我缺乏基础知识,例如" GDB" :

我正在使用openmp子句开发段错误的fortran程序。 我已经通过gdb给出了程序无法达到的内存位置的地址,但我想知道有问题的变量的名称,以帮助找出问题所在。

如何给出位于0x00002aaaaab455ca的变量的名称,gdb在我的确切情况下说?

感谢' S,  大卫

我可能需要一个gdb脚本给我所有变量的所有地址,但我甚至不知道如何做到这一点;你能给我一个地址去哪里学习吗?谢谢。

编辑:我用这种方式使用gfortran: $ gfortran input.f -g -freal-8-real-16 -o output

EDIT2:对不起,我当然要用-fopenmp;并且我还使用前面编译中的所有警告,以便非常清洁"生产运行的代码。 (我已经检查过任何可能的事情,我只需要变量的名称为segfaults,以便更正它的索引计算)

1 个答案:

答案 0 :(得分:2)

  你可以给我一个地址去哪里学习

这些问题在这里是偏离主题的,但这里是GDB上的book

您有两种选择:

  1. 您可以学习足够的GDB来调试此问题,或
  2. 你可以贿赂更熟悉的人为你做这件事。
  3. 假设你想做(1),这里有一些你可能会觉得有用的命令:

    • where(告诉你程序在哪里崩溃)
    • x/i $pc(告诉您导致崩溃的指示)
    • info registers(这与上面一起,应该为您提供程序尝试访问的确切地址)
    • info localsinfo globalsinfo addr 0x....(为您提供本地和全局变量的列表,也可以告诉您对崩溃地址的需求)。

    如果上述还不够,您应该编辑您的问题以显示您的距离(即上述命令的输出),我们可以为您提供更多帮助。但是很难通过这种低速连接进行调试,所以你真的应该尝试找到离你更近的人(即使用选项(2))。