【问题标题】:How to debug C++-Program which triggers internal bug in gdb?如何调试触发gdb内部错误的C++程序?
【发布时间】:2021-11-12 03:58:29
【问题描述】:

在我的一个 C++ 项目中,我发现了一个与链接库相关的问题,该问题在启动已编译的可执行文件后直接导致段错误。我尝试使用 gdb 深入研究该问题,但输出失败:

../../gdb/dwarf2/read.c:1857: internal-error: bool dwarf2_per_objfile::symtab_set_p(const dwarf2_per_cu_data*) const: Assertion `per_cu->index < this->m_symtabs.size ()' failed.

在这是一个内部错误之后,我无法做很多事情(除了报告它),但我仍然希望能够调试程序本身。我有哪些选择?

  • 使用与 gdb 不同的调试器?
  • 手动更新到较新版本的 gdb(当前为 10.1)?
  • 在损坏调试器之前以某种方式捕获段错误?
  • ?

【问题讨论】:

  • 是的,在您的情况下,我会先尝试将 GDB 升级到最新版本。然后,如果仍然崩溃,请尝试使用 LLDB。祝你好运。
  • 也许您可以尝试启用 Address Sanitizer。消毒剂可能会捕获错误,并且可能会为您提供有意义的报告。也许 GDB 不会在那种情况下崩溃。
  • 另一种可能的解决方案:交换编译器。我正在使用clang并收到此错误。交换到 gcc 完成了这项工作。否则切换到较旧的编译器,如newer compilers can cause problems for gdb

标签: c++ segmentation-fault gdb


【解决方案1】:

这很可能已经修复了 gdb 错误:https://sourceware.org/bugzilla/show_bug.cgi?id=28160。它有 Target Milestone 11.1,所以更新到最新版本的 gdb,现在是 11.1。它应该在那个版本中得到修复。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2015-09-15
    • 2010-10-16
    • 2013-09-22
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2011-06-07
    • 2020-11-28
    相关资源
    最近更新 更多