如何在Windows上诊断异常代码0xc0000409
How do you diagnose the exception code 0xc0000409 on Windows?
我有一个C++windows应用程序,它是由另一个程序员完成的,我不得不删除一行代码。在使用visual studio 2013重建应用程序后,它在事件日志中崩溃:
Faulting application name: WaveStream.exe, version: 0.0.0.0, time stamp: 0x536122da
Faulting module name: WaveStream.exe, version: 0.0.0.0, time stamp: 0x536122da
Exception code: 0xc0000409
Fault offset: 0x0000bd7f
Faulting process id: 0x8b8
Faulting application start time: 0x01cf6490aee4f557
Faulting application path: C:Program Files (x86)PS AudioWaveStream.exe
Faulting module path: C:Program Files (x86)PS AudioWaveStream.exe
Report Id: efe00d42-d083-11e3-a513-bc305baf9e1e
该应用程序使用QT 4.7.4,并且编译时没有任何错误。我是一名嵌入式系统程序员,几乎没有windows编程经验。我该怎么办才能弄清楚它为什么会崩溃?
问题的线索在异常代码中:0xc0000409
0xc0000409表示STATUS_STACK_BUFFER_OVERRUN。
换句话说,程序中的某些内容正在写入当前堆栈帧,从而损坏堆栈上的数据。程序检测到了这一点,并没有让它继续,而是抛出了一个异常。
你是如何调试的?有几个选项:
1(在调试器中重新运行此程序,并观察它崩溃,解决失败的问题。
2(如果您有一个崩溃转储,请将其加载到调试器中,按F5键并计算失败的部分。
3(如果您没有崩溃转储,如果您知道崩溃的绝对地址(并且知道模块总是在固定地址加载(,或者如果您知道从发生故障的模块开始的崩溃位置偏移,您仍然可以尝试找出崩溃的原因。
上面的崩溃信息告诉您崩溃的故障模块的偏移。这在故障偏移字段中报告。在您的示例中,这是0x0000bd7f的偏移量。
如果您有原始dll/exe,并且它与PDB匹配,只需将其加载到DbgHelpBrowser中,转到查询菜单,选择"查找具有dll相对地址的符号…">,然后在字段中输入偏移量,并单击的"查找符号…",高亮显示符号并显示有关参数、行号和源代码的任何信息。
这是一个免费的工具。您可以在此处获取:https://www.softwareverify.com/cpp-dbghelp-browser.php
免责声明。我写这个工具就是为了完成这项工作,供我们在家里使用。我们最近为其他人提供了它。我在试图理解异常代码0xc0000409的含义时发现了这个问题
尝试为应用程序创建崩溃转储。请参阅此StackOverflow问题和MSDN文档,了解如何做到这一点。一旦您有了崩溃转储文件,请在Visual Studio调试器中打开它,您将能够看到异常和异常的调用堆栈,这应该会有所帮助。
!分析windbg 中的-v
它会为你做很多工作。
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- VisualStudios 会抛出异常,而代码块不会 [C++]
- [longjmp/setjmp]c++ 相同的代码窗口有异常 Linux 没有错误并且运行良好
- 为什么代码段会引发浮点异常?
- 我应该C++自定义异常代码放在哪里?
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- C++中的奇怪异常代码,当用户输入为 23 时,退出值 1,073,740,940(代码:0xc0000374)
- 如何在Visual Studio(2015)中增加堆栈尺寸的堆栈尺寸?异常代码:C00000FD
- 从覆盖范围报告中删除自动生成的异常代码
- 防火墙异常代码仅适用于传出连接
- 需要对异常代码进行解释
- C/C++语言-指针和算术..异常代码:c0000005
- 异常代码"EXC_I386_GPFLT"的含义是什么?
- 单元测试失败,异常代码为c0000005
- 如何使异常代码DRY
- 访问计算机指针时发生访问冲突(c系统异常代码:c0000005),导致应用程序崩溃
- 如何在Windows上诊断异常代码0xc0000409
- 如何在iOS Objective-C中捕获C++异常代码