【问题标题】:GDB C++ - Inspecting STL Containers when looking at a core dump?GDB C++ - 在查看核心转储时检查 STL 容器?
【发布时间】:2012-05-01 15:27:55
【问题描述】:

我正在 gdb 中调试我的程序的核心转储(事后分析)。我打开它: gdb [程序名称] [核心名称]

但是,当我尝试检查 STL 向量时,例如 打印 vec->size() 或者 打印 vec->at(0)

我得到了错误

“如果没有调试过程,您将无法做到这一点”

我只是想检查这些容器的内容和大小。有什么方法可以将虚拟进程附加到核心转储 gdb 检查,以便我可以做到这一点?

【问题讨论】:

  • 您使用的是什么版本的 gdb?根据版本,您可以搜索 STL 漂亮的打印机,它们将处理内存并生成容器的人类可读表示。 sourceware.org/gdb/wiki/STLSupport
  • 您正在尝试调用事后调试时无法执行的函数。只需检查向量内存即可。

标签: c++ stl gdb coredump


【解决方案1】:

打印矢量:

(gdb) print *vec

然后熟悉实现向量的内部结构并打印原始缓冲区。通常称为“_M_buffer”或类似的名称。根据您的操作方式,缓冲区可能位于其中的内部对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多