2012-05-16 114 views
5

當我使用蘋果的GDB,版本遵循怪異GDB消息調試C++程序

GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin". 

我不使用的Xcode IDE,因爲我需要的makefile管理項目都比較方便,尤其是因爲我經常需要在遠程機器上編譯和運行程序。我最近開始使用下面的C++ 11特性(在maC++的g ++ - 4.6和4.7中):移動構造函數,nullptr,auto和decltype。我隨着研究的深入需要d3bug我的代碼,並以下怪異的消息出現,而不是步入一個功能:

Die: DW_TAG_unspecified_type (abbrev = 36, offset = 4315) 
     has children: FALSE 
     attributes: 
       DW_AT_name (DW_FORM_string) string: "decltype(nullptr)" 

從自出現此消息,以下所有gdb命令是由同一個奇怪的消息回答,所以它不是可以再調試一次。這似乎與c + + 11有關。我的問題是,你有沒有遇到這個消息,以及如何擺脫它 呢?

在此先感謝

朱利亞諾

+3

我的猜測是你的gdb版本滯後 - 它看起來像是[DWARF](http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F)信息它沒有'不瞭解。解決方案:構建/安裝更新的gdb。 – Flexo

回答

3

GDB的版本你使用(蘋果版)似乎不支持你的MacPorts從安裝編譯器的新功能。

錯誤消息是報告GDB不瞭解它在程序中遇到的一些調試信息。它顯示的調試信息顯然與C++ 11相關。

解決方案是升級到更新的GDB(可能來自macports,如果有的話),不使用GDB不理解的功能,或者接受您擁有的GDB版本將無法使用瞭解這個。

+0

我試圖安裝macport的gdb幾次,但它從來沒有爲我工作。由於我匆忙,我不想改變這個程序。我認爲選項#3是目前的選項。公認。 – Giuliano

6

http://gcc.gnu.org/gcc-4.5/changes.html

GCC現在生成的展開信息還爲尾聲。 GCC生成的DWARF調試信息現在使用比以前更多的DWARF3功能,還有一些DWARF4功能。 7.0以前的GDB無法處理其中任何一種,因此需要調試GCC 4.5生成的二進制文件或庫時需要GDB 7.0或更高版本。您可以禁用使用DWARF4功能與-gdwarf-3 -gstrict-dwarf選項,或使用-gdwarf-2 -gstrict-dwarf限制GCC只是DWARF2,但尾聲放鬆方式發出無條件放卷時的信息被髮射。

不過你已經知道了,因爲每個人都讀,當他們升級他們的編譯器的發行說明,對不對? ;-)

+3

很高興知道!當然,在執行我的'sudo port install'之前,我仔細閱讀了整個發行說明!你覺得你在和誰說話? – Giuliano

+0

大聲笑...當然,每個人都知道! – jww