2013-10-02 14 views
9

我在Ubuntu 12.04安裝GCC 4.8.1(我不得不添加PPA這樣做)現在GDB顯示以下信息:Ubuntu上的C++應用程序。安裝GCC 4.8.1之後,GDB不工作

無法找到動態鏈接程序斷點功能。 GDB將無法調試共享庫初始化程序 並跟蹤顯式加載的動態代碼。不能爲5個庫加載共享庫符號,例如, /usr/lib/x86_64-linux-gnu/libstdc++.so.6。 使用「info sharedlibrary」命令查看完整列表。 你需要「設置solib-search-path」或「set sysroot」嗎?

我做了谷歌,我發現這篇文章,以最好的回答我的問題: http://www.fayewilliams.com/2013/01/31/gdb-unable-to-find-dynamic-linker-breakpoint-function/

,但是我還是不明白這樣做究竟是什麼。有人可以幫忙嗎?謝謝!

+1

或者,您可以將'-gdwarf-2'傳遞給編譯器以生成與GDB 7.4兼容的調試符號。 – legends2k

回答

13

我也有同樣的問題,並能夠解決它。

我從這個PPA(https://launchpad.net/~ubuntu-toolchain-r/+archive/test)安裝了GCC的最後一個「穩定」版本(4.8.1),並且一切都很完美,直到我必須處理調試問題。您可以注意到,在此PPA中,工具鏈並未提供用於處理編譯器升級的GDB更新版本。事實上,我沒有發現任何PPA提供更新版本的GDB。

在我的情況下,我解決了這種情況,從其網站(http://www.sourceware.org/gdb/)下載並安裝最新的GDB穩定版(7.6)。即使我使用新的C++ 11標準(使用-std = C++編譯的代碼),此版本的GDB也能夠解析這些符號並向我提供使用Gcc 4.8.1生成的二進制文件的所有必要信息11旗)。

考慮到手動安裝這個新版本的GDB會默認安裝/usr/local/bin/gdb中的二進制文件。

+0

我明白了,謝謝! – vincegata

+0

你知道如何在普通的/ usr/bin中安裝嗎? – vincegata

+0

安裝在/ usr而不是/ usr/local:./configure --prefix =/usr – vincegata

2

Gdb通常附帶工具鏈。

您可能正在使用以前的工具鏈附帶的gdb。使用

which gdb 

發現你正在使用哪個gdb。

要調試使用新編譯器編譯的程序,必須使用新的gdb,無論它是什麼。