c++ - Windows 7 异常代码 : 0xc0000409

标签 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 编程经验。我该怎么做才能弄清楚崩溃的原因?

丹尼斯

最佳答案

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

0xc0000409 表示STATUS_STACK_BUFFER_OVERRUN

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

你如何调试这个?有几个选项:

1) 在调试器中重新运行它并观察它崩溃,找出失败的地方。

2) 如果您有此故障转储,请将其加载到调试器中,按 F5 键并尝试失败的部分。

3) 如果您没有崩溃转储,如果您知道崩溃的绝对地址(并且知道模块始终加载于一个固定地址),或者如果你知道崩溃位置从故障模块开始的偏移量。

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

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

这是一个免费工具。你可以在这里得到它: https://www.softwareverify.com/cpp-dbghelp-browser.php

免责声明。我编写这个工具来完成这项工作,供我们内部使用。我们最近将其提供给其他所有人。我在试图理解异常代码 0xc0000409 的含义时发现了这个问题。

关于c++ - Windows 7 异常代码 : 0xc0000409,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409809/

相关文章:

c++ - 初始化嵌套模板类

c++ - 套接字编程(服务器和客户端在同一台计算机上)连接有问题

c++ - 如何使用 C++ 库实现数据包整形或 QOS?

windows - "downloads"文件夹在哪里

c++ - 具有 2 个未知大小和 1 个已知大小的 3D vector

c++ - 意外的 undefined reference

windows - 打开默认桌面注册表项时发生 BGInfo 错误

windows - bat 脚本只运行第一行?

visual-studio - 如何让t4文件在visual studio中构建?

visual-studio - Visual Studio 2017 TypeScript 编译错误