Windows 7异常代码:0xc0000409 我有一个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

Windows 7异常代码:0xc0000409 我有一个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,c++,windows,visual-studio,qt,visual-c++,C++,Windows,Visual Studio,Qt,Visual C++,该应用程序使用Qt4.7.4,编译时没有错误。我是一名嵌入式系统程序员,几乎没有windows编程经验。我能做些什么来找出它崩溃的原因 Dennis尝试为应用程序创建崩溃转储。有关如何执行此操作的详细信息,请参阅和。获得崩溃转储文件后,在Visual Studio调试器中打开它,您将能够看到异常和异常的调用堆栈,这应该会有所帮助。问题的线索在异常代码中:0xc0000409 0xc0000409表示状态\堆栈\缓冲区\溢出 换句话说,程序中的某些内容正在写入当前堆栈帧,从而损坏堆栈上的数据。程序

该应用程序使用Qt4.7.4,编译时没有错误。我是一名嵌入式系统程序员,几乎没有windows编程经验。我能做些什么来找出它崩溃的原因


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

问题的线索在异常代码中:0xc0000409

0xc0000409表示状态\堆栈\缓冲区\溢出

换句话说,程序中的某些内容正在写入当前堆栈帧,从而损坏堆栈上的数据。程序检测到了这一点,并没有让它继续,而是抛出了一个异常

如何调试这个?有几种选择:

1)在调试器中重新运行此程序,并观察它崩溃,找出失败的原因

2)如果您对此进行了崩溃转储,请将其加载到调试器中,点击F5并计算失败的内容

3)如果没有崩溃转储,如果您知道崩溃的绝对地址(并且知道模块总是在固定地址加载),或者如果您知道崩溃位置从故障模块开始的偏移量,您仍然可以尝试找出崩溃的原因

上面的崩溃信息告诉您崩溃故障模块的偏移量。这在故障偏移字段中报告。在您的示例中,这是0x0000bd7f的偏移量

如果您拥有原始dll/exe,并且它与PDB匹配,只需将其加载到中,进入“查询”菜单,选择“查找具有dll相对地址的符号…”,然后在字段中输入偏移量,然后单击“查找符号…”。显示屏将移动以显示最近的匹配符号,突出显示符号并显示有关参数、行号和源代码的任何信息

这是一个免费的工具。你可以在这里找到它:

免责声明。我写这个工具就是为了做这项工作,供我们内部使用。我们最近为其他人提供了它。我在试图理解异常代码0xc0000409的含义时发现了这个问题。

!分析windbg中的-v


它将为您做很多工作。

您可以使用visual studio构建调试版本并附加到它,一旦出现此错误,它就会中断。如我所说,我不太熟悉visual studio环境中的编程。我不知道该怎么做,你能给我指一个HowTo链接吗?你确定你删除的一行代码就是这个原因吗?如果你把它放回原处,你可以发布这段代码,只要它不太长。把这行代码放回原处,找出它为什么如此重要。我肯定我删除的这行代码不是问题所在。我把它放回原处,但仍然存在问题。我确信它存在于我的构建环境或系统设置中。不幸的是(无论如何,以我的经验来看),给定的偏移量是引发错误的代码地址——尝试调用Watson进行报告的实施。这不是故障的实际位置。因为这里的问题是内存中断,导致损坏的代码消失了,而引起问题的是注意到金丝雀被杀的代码。这可能会使您找到正确的函数,但它不是日志中报告的偏移量。@MikeB:c000409是一个函数。一般来说,由于内存损坏导致的SEH异常可能会在很久以后报告,但这是一个规则的例外(双关语)。请注意,状态\u STACK\u BUFFER\u溢出通常并不意味着存在堆栈缓冲区溢出,它只是意味着应用程序决定非常匆忙地终止自身。更多细节。