我目前正在运行一个文件管理器程序,该程序突然崩溃并出现分段错误并转储了核心文件。所以我使用gdb将核心文件调试为:
gdb /path/to/executable /path/to/core
我运行的程序是用C ++编写的。当我运行GDB并尝试使用" list"打印源代码行时,出现以下错误:
(gdb) bt
#0 0x0000000000554286 in
MyFSEventManager::AddEvent(wxFileSystemWatcherEvent&) ()
#1 0x00000000005ab2e8 in
MyGenericDirCtrl::OnFileWatcherEvent(wxFileSystemWatcherEvent&) ()
(gdb) f 0
#0 0x0000000000554286 in
MyFSEventManager::AddEvent(wxFileSystemWatcherEvent&) ()
(gdb) l
1 /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c: No such file or directory.
为什么gdb会说这个" /build/glib2.0-prJhLS/glib2.0-2.48.2 /./ glib / gmain.c:没有这样的文件或目录。" 我没有使用gdb调试的其他一些程序遇到此问题。
使用的操作系统是在Oracle虚拟机上运行的Ubuntu 16.04。我想可能是没有加载的gdb符号。我不确定为什么因为我使用" -g"编译了程序。选项。我真的需要知道代码在gdb崩溃的源代码行。
有什么建议吗?
编辑:在使用俄语
的建议后更改我正在编译我的主要使用" -g"选项并将其链接到"现有"显然没有使用" -g"编译的目标文件所以当核心转储时,我看不到这些文件的来源。所以我继续用" -g"重新编译这些文件。选项并转载核心转储。它现在可以向我展示源代码行。
答案 0 :(得分:1)
为什么gdb会这样说" /build/glib2.0-prJhLS/glib2.0-2.48.2 /./ glib / gmain.c:没有这样的文件或目录。"
因为确实在您的系统上没有该文件。但这与你的实际问题无关。
使用的操作系统是Ubuntu 16.04
那是无关的。
我想可能是gdb符号未加载
GDB 为glib加载调试符号,但不为主可执行文件加载。
我不确定为什么因为我使用" -g"编译了程序。选项。
有很多方法可以错误地构建程序。您没有显示您的编译和链接行,因此我们无法准确地告诉您哪种方式搞砸了。
一些常见方式:
-s
或-Wl,-s
(这会从生成的二进制文件中删除调试信息)。-g
时有main.c
,但在编译MyFSEventManager::AddEvent()
已定义的来源时却没有P.S。
(gdb) bt
这不能是bt
命令的完整输出。通过删除部分输出,您已经帮助更难。