2017-04-16 528 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

相關問題