gdb列表错误"没有这样的文件或目录"

时间:2017-04-16 04:49:48

标签: c++ linux debugging gdb

我目前正在运行一个文件管理器程序,该程序突然崩溃并出现分段错误并转储了核心文件。所以我使用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"重新编译这些文件。选项并转载核心转储。它现在可以向我展示源代码行。

1 个答案:

答案 0 :(得分:1)

  

为什么gdb会这样说" /build/glib2.0-prJhLS/glib2.0-2.48.2 /./ glib / gmain.c:没有这样的文件或目录。"

因为确实在您的系统上没有该文件。但这与你的实际问题无关。

  

使用的操作系统是Ubuntu 16.04

那是无关的

  

我想可能是gdb符号未加载

GDB 为glib加载调试符号,但不为主可执行文件加载。

  

我不确定为什么因为我使用" -g"编译了程序。选项。

有很多方法可以错误地构建程序。您没有显示您的编译和链接行,因此我们无法准确地告诉您哪种方式搞砸了。

一些常见方式:

  1. 你有一个"流浪"链接行上的-s-Wl,-s(这会从生成的二进制文件中删除调试信息)。
  2. 您在编译-g时有main.c,但在编译MyFSEventManager::AddEvent()已定义的来源时却没有
  3. P.S。

      

    (gdb) bt

    这不能是bt命令的完整输出。通过删除部分输出,您已经帮助更难