Windows 7异常代码:0xc0000409

时间:2014-05-01 14:33:39

标签: c++ windows visual-studio qt visual-c++

我有一个由另一个程序员完成的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 Audio\WaveStream.exe
Faulting module path: C:\Program Files (x86)\PS Audio\WaveStream.exe
Report Id: efe00d42-d083-11e3-a513-bc305baf9e1e

该应用程序使用QT 4.7.4,并且编译时没有错误。我是一名嵌入式系统程序员,拥有极少的Windows编程经验。我该怎么做才能找出崩溃的原因?

丹尼斯

3 个答案:

答案 0 :(得分:5)

问题的线索在异常代码中: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的含义时发现了这个问题。

答案 1 :(得分:2)

尝试为应用程序创建崩溃转储。有关如何执行此操作,请参阅this StackOverflow questionMSDN documentation。获得崩溃转储文件后,在Visual Studio调试器中打开它,您将能够看到该异常的异常和调用堆栈,这应该会有所帮助。

答案 2 :(得分:-1)

!analyize -v in windbg

它会为你做很多工作。