C++ 很难让GDB加载调试符号

C++ 很难让GDB加载调试符号,c++,c,linux,gdb,C++,C,Linux,Gdb,我经常使用GDB调试C/C++程序,我对它的工作原理和功能相当了解 然而,我经常遇到一些问题,奇怪的是,我似乎无法让GDB正确地从核心文件加载符号 目前,我在共享NFS目录中有一个二进制可执行文件。可执行文件肯定是用-g3标志编译的。可执行文件崩溃并将一个核心文件转储到我的Linux机器的/home目录中 由于某些原因,我无法让GDB从核心文件加载符号 当我尝试时: $ gdb <executable_file> <core_file> $gdb GDB已加载,但我无

我经常使用GDB调试C/C++程序,我对它的工作原理和功能相当了解

然而,我经常遇到一些问题,奇怪的是,我似乎无法让GDB正确地从核心文件加载符号

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

由于某些原因,我无法让GDB从核心文件加载符号

当我尝试时:

$ gdb <executable_file> <core_file>
$gdb
GDB已加载,但我无法获得回溯,并且没有加载调试符号

如果我运行GDB,然后在GDB提示符下键入
core
,它将加载核心文件,我发现核心文件肯定与先前崩溃的二进制可执行文件相关联。然而,GDB报告“未能从内存中读取有效的对象文件映像”,因此我无法获得有意义的回溯跟踪,并且没有加载调试符号


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

检查您的ulimit。这是一个很常见的困惑来源。被截断的核心文件可能会使任何形式的gdb检查无效,在大多数情况下,您可以读取二进制文件的名称,如果核心文件至少为8k,则可以获得堆栈跟踪。

是否所有共享库都已加载?尝试
$ldd
 $ ldd <executable_file> 

看看这是否能帮你解决问题。

胡乱猜测:一个或两个文件都在远程挂载上,gdb机器与构建或崩溃环境不同吗?