Home Articles

难以让GDB加载调试符号

Asked
Viewed 351 times
3

我经常使用GDB来调试C / C程序,而且我对它的工作方式和它可以做的事情有相当的了解 .

然而,每隔一段时间我就会遇到一些神秘的问题,我似乎无法让GDB从核心文件中正确加载符号 .

目前,我在共享NFS目录中有一个二进制可执行文件 . 可执行文件肯定是使用-g3标志编译的 . 可执行文件崩溃并将核心文件转储到我的Linux机器的/ home目录中 .

出于某种原因,我无法让GDB从核心文件加载符号 .

当我尝试:

$ gdb <executable_file> <core_file>

GDB加载,但我无法获得回溯,并且没有加载调试符号 .

如果我运行GDB,然后在GDB提示符下输入 core <core file name> 它会加载核心文件,我发现核心文件肯定与先前崩溃的二进制可执行文件相关联 . 但是,GDB报告“无法从内存中读取有效的目标文件图像', so I can' t获得有意义的反向跟踪,并且没有加载调试符号 .

有谁知道这可能是什么原因?通常我可以让GDB正确加载核心文件并读入调试符号,但在这种情况下它不起作用 . 可能是因为二进制可执行文件存储在共享NFS挂载上?

2 Answers

  • 5

    检查你的ulimits . 这是混乱的常见原因 . 截断的核心文件可以使任何形式的gdb检查无效,在大多数情况下你可以读取二进制文件的名称,如果核心文件至少为8k,你可以获得堆栈跟踪 .

  • 0

    是否所有共享库都被加载?尝试

    $ ldd <executable_file>
    

    并查看是否可以帮助您解决问题 .

Related