2012-05-16 68 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