这个问题可能是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

最佳答案

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

祝好运。

关于c++ - 如何解释.stackdump文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12906523/

10-11 21:38