C++ 如何解释.stackdump文件?

C++ 如何解释.stackdump文件?,c++,debugging,stack-trace,stack-dump,C++,Debugging,Stack Trace,Stack Dump,这个问题可能是重复的-但我是一个初学者,我不理解答案,甚至部分问题 我对C++和编程很陌生,我正在NETBeBeS开发。我正在编写一些编译得很好的代码,但在运行时失败了。如果使用调试器,会出现以下错误: 1 [main] all 6200 exception::handle: Exception: STATUS_ACCESS_VIOLATION 881 [main] all 6200 open_stackdumpfile: Dumping stack trace to all.exe.stack

这个问题可能是重复的-但我是一个初学者,我不理解答案,甚至部分问题

我对C++和编程很陌生,我正在NETBeBeS开发。我正在编写一些编译得很好的代码,但在运行时失败了。如果使用调试器,会出现以下错误:

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也是识别这些函数的好选择。 如果您打算经常处理此类崩溃问题,建议编写一个脚本工具来帮助您的工作

祝您好运。

您可以使用“函数”地址作为
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

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

gdb内部运行:
<代码>信息线*0xADD4355

你使用的是什么C++编译器?是g++吗?你需要使用调试符号进行编译,然后使用gdb。我使用的是cygwin工具-gdb,等等。我不知道你说的调试符号是什么意思。嗨@Hao,我刚刚遇到了同样的问题。你能用一个如何使用addr2line实用程序的例子来扩展你的答案吗?