5

我用的是苹果的gdb,版本如下

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 功能(在 macports 的 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有关。我的问题是,您是否遇到过此消息,以及如何摆脱它?

提前致谢

朱利亚诺

4

2 回答 2

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,但无论何时发出展开信息,都会无条件地发出结尾展开信息。

但是您已经知道了,因为每个人在升级编译器时都会阅读发行说明,对吧?!;-)

于 2012-05-18T17:31:38.123 回答
3

您使用的 GDB 版本(Apple 版本)似乎不支持您从 macports 安装的编译器的新功能。

错误消息是报告 GDB 不理解它在程序中遇到的一些调试信息。它显示的调试信息是 C++11 功能。

解决方案是升级到较新的 GDB(可能从 macports,如果有的话),不使用 GDB 不理解的功能,或者接受您拥有的 GDB 版本将无法理解这一点。

于 2012-05-16T15:30:00.657 回答