调试程序时奇怪的GDB消息C++
weird gdb message when debugging C++ program
我使用苹果的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 上):move constructors、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 现在也会为尾声生成展开信息。GCC生成的DWARF调试信息现在使用了比以前更多的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 版本将无法理解这一点。
- boost::进程间消息队列引发错误
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 使用vscode调试时,GDB意外退出
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- 忽略来自 GDB(终端)中的包含/库文件的调试消息
- 为什么我在 gdb 中收到 ifstream 对象的<不完整类型>消息?
- 调试程序时奇怪的GDB消息C++
- gdb、hp ux:获取消息找不到虚拟表 -- 对象可能尚未构造