我目前正在運行一個文件管理器程序,突然崩潰與分段錯誤和轉儲核心文件。所以我用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」選項重新編譯這些文件,並重現了核心轉儲。它現在能夠顯示源代碼行。
bt輸出中有68條曲線。在這裏粘貼它們會很麻煩,並且讓所有人都感到困惑。所以我沒有發佈它們。讓我檢查我的make文件,看看是否有意外使用-s或-Wl,-s選項。 – paratrooper
@paratrooper「有68 ...」 - 這實際上可能非常相關(你可能有堆棧溢出)。我的觀點是:通過忽略信息,你會更難以幫助你。 –
基於你上面提到的,我剛剛交叉檢查了我的make文件和Boom。你是絕對正確的。我正在使用「-g」選項編譯我的主目錄,並將它鏈接到顯然不是使用「-g」編譯的「現有」目標文件,所以當核心轉儲時,我看不到這些文件的來源。所以我繼續使用「-g」選項重新編譯這些文件,並重現了核心轉儲。它現在能夠顯示源代碼行。我接受你的答案 – paratrooper