【发布时间】:2012-09-12 12:28:28
【问题描述】:
我在基于对话框的 MFC 应用程序中添加了一个“打开文件”对话框。现在,在打开文件对话框通过按下打开或取消按钮关闭一分钟(!)后,我的应用程序崩溃了。当它崩溃时,输出中发生了以下事情:
1) 一堆 Windows 线程正在退出;
2) 一堆 COM 异常(0x80010108“调用的对象已与其客户端断开连接”和 0x800401FD“对象未连接到服务器”种类)被抛出;
3) 最后,出现一个未处理的异常:0xC0000005: 访问冲突读取位置 0xfeeefeee,调用堆栈指向 ole32.dll。
说我很困惑是轻描淡写的。调用对话框的代码如下:
CFileDialog fileDlg( TRUE, _T(".txt"), NULL, OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST,
_T("Text file (*.txt)|*.txt||"), this);
INT_PTR res = fileDlg.DoModal();
什么会导致这样的事情?
我该如何调试它?
【问题讨论】:
-
您是否在对话框关闭后将所有内容都注释掉了,以确保确实是对话框导致了这种情况,而不是某些操作对其结果起作用?
-
@GazTheDestroyer - 是的,什么都没有发生。
-
我们曾经遇到过类似的问题。我们的应用程序在文件打开对话框中执行某些操作时崩溃。原因是一个有缺陷的 Windows Shell 扩展 DLL(Adobe Acrobat Reader Preview),很难找到。你能在干净的 Windows 系统上重现这个问题吗?
-
@Aesthete - 它确实没有多大帮助:ole32.dll!74c5c99e() [下面的帧可能不正确和/或丢失,没有为 ole32.dll 加载符号] ole32.dll!74c9eb7f( ) ole32.dll!74c9eb4d() ...fundisc.dll!5c4f63ee() kernel32.dll!764d339a() 等
-
您可以通过右键单击未知堆栈条目并选择下载符号信息来获得更好的堆栈。 (假设这是 Visual Studio 的新版本)