繁体   English   中英

调试C ++程序时出现奇怪的gdb消息

[英]weird gdb message when debugging C++ program

我使用apple的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有关。 我的问题是,你有没有遇到这个消息,以及如何摆脱它?

提前致谢

朱利亚诺

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

海湾合作委员会现在也为结语生成展开信息。 GCC生成的DWARF debuginfo现在使用了比以前更多的DWARF3功能,以及一些DWARF4功能。 早于7.0的GDB无法处理其中任何一个,因此需要调试GCC 4.5生成的二进制文件或库GDB 7.0或更高版本。 您可以使用-gdwarf-3 -gstrict-dwarf选项禁用DWARF4功能,或使用-gdwarf-2 -gstrict-dwarf将GCC限制为仅DWARF2,但只要发出展开信息,就会无条件地发出结尾展开信息。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM