【问题标题】:How can I interpret a .stackdump file?如何解释 .stackdump 文件?
【发布时间】:2012-10-16 02:00:31
【问题描述】:

这个问题很可能是Using a stackdump from Cygwin executable 的重复 - 但我是初学者,我不明白答案,甚至部分问题。

我是 C++ 和编程的新手,我正在使用 NetBeans 进行开发。我正在处理一些编译得很好但运行时失败的代码。如果我使用调试器,我会收到以下错误:

1 [main] all 6200 exception::handle: Exception: STATUS_ACCESS_VIOLATION
881 [main] all 6200 open_stackdumpfile: Dumping stack trace to all.exe.stackdump

我已经设法找到文件 all.exe.stackdump,我可以通过 notepad++ 读取它,但我不明白它的含义。我通过另一个问题收集到有一种用户友好的方式来解码这个文件,但我最好的猜测 bash$ gdb all.exe.stackdump 是无效的。我在调试中使用此文件的最佳方式是什么?

以防万一,这里是 all.exe.stackdump 的内容

Exception: STATUS_ACCESS_VIOLATION at eip=00434C41
eax=2003A2E4 ebx=0028A95C ecx=00000000 edx=0028A95C esi=0028A9B0 edi=00000000
ebp=0028A9C8 esp=0028A930 program=[redacted for privacy/security], pid 6200, thread main
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame     Function  Args
0028A9C8  00434C41  (00000000, 2003A4F0, 0028A9E8, 00000000)
0028A9E8  00436B14  (00000000, 2003A4F0, 0028AA28, 0028D000)
0028AAF8  004036A4  (0028AB80, 2003A2B0, 00000014, 00000003)
0028ABD8  00403FBC  (00000001, 0028AC00, 200280E8, 2003A189)
0028ACF8  61007535  (00000000, 0028CD78, 61006B20, 00000000)
End of stack trace

【问题讨论】:

  • 您使用的是什么 C++ 编译器?是g++吗?您需要使用调试符号进行编译,然后使用 gdb。
  • 我正在使用 cygwin 工具 - gdb 等。我不知道您所说的调试符号是什么意思。

标签: c++ debugging stack-trace stack-dump


【解决方案1】:

您可以使用“函数”地址作为addr2line 的参数。

addr2line -f -C -e main.exe 0xADD4355

在所有地址中使用 awk 和管道过滤它:

awk '/^[0-9]/{print $2}' main.exe.stackdump | addr2line -f -C -e main.exe

如果您看到 ?? 而不是函数名称,则需要使用调试符号(-g-ggdb3...)重新构建

【讨论】:

    【解决方案2】:

    这是很多人的通病;通常他们会告诉你使用 gdb。然而,这并不总是一个合理的答案。您不能重新编译它,因为不能保证新版本与崩溃的版本具有相同的符号地址。 有几个工具可能会有所帮助:objdump、addr2line 等。 您可以执行“objdump -D -S build.out > build.rasm.txt”,然后在文本中搜索这些函数地址。 Addr2line 也是识别这些功能的好选择。 如果您要经常处理此类崩溃问题,建议您编写一个脚本工具来帮助您的工作。

    祝你好运。

    【讨论】:

    • 嗨@Hao,我刚遇到同样的问题。您能否通过一个如何使用 addr2line 实用程序的示例来扩展您的答案?
    【解决方案3】:

    另一种查找问题行的方法是在二进制文件上使用 gdb。 所以先运行gdb: gdb main.exe

    在 gdb 内部运行: info line *0xADD4355

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多