2017-04-16 49 views
0

我目前正在运行一个文件管理器程序,突然崩溃与分段错误和转储核心文件。所以我用gdb调试核心文件为:gdb列表错误“没有这样的文件或目录”

gdb /path/to/executable /path/to/core 

我运行的程序是用C++编写的。当我跑了GDB,并试图打印使用“列表”的源代码行,我得到了以下错误:

(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

Why does gdb say this "/build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c: No such file or directory."

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

The operating system used is Ubuntu 16.04

也就是说无关

I think may be the gdb symbols were not loaded

GDB 负荷调试符号巧舌如簧,但不是你的主要可执行文件。

I'm not sure why since I compiled the program using the "-g" option.

有很多方法不正确地编译程序。你没有显示你的编译和链接线,所以我们不能确切地告诉你你搞砸了哪一种方式。

一些常见的方式:

  1. 你有一个“流浪” -s-Wl,-s你的链接线(这条调试信息从生成的二进制)。
  2. 你有-g编译你main.c的时候,但在编译其中MyFSEventManager::AddEvent()定义

附注:源不是当

(gdb) bt

这不能从bt命令完成输出。通过删除部分输出,您可以帮助您更难。

+0

bt输出中有68条曲线。在这里粘贴它们会很麻烦,并且让所有人都感到困惑。所以我没有发布它们。让我检查我的make文件,看看是否有意外使用-s或-Wl,-s选项。 – paratrooper

+0

@paratrooper“有68 ...” - 这实际上可能非常相关(你可能有堆栈溢出)。我的观点是:通过忽略信息,你会更难以帮助你。 –

+0

基于你上面提到的,我刚刚交叉检查了我的make文件和Boom。你是绝对正确的。我正在使用“-g”选项编译我的主目录,并将它链接到显然不是使用“-g”编译的“现有”目标文件,所以当核心转储时,我看不到这些文件的来源。所以我继续使用“-g”选项重新编译这些文件,并重现了核心转储。它现在能够显示源代码行。我接受你的答案 – paratrooper

相关问题