这个应用程序已请求运行时以异常方式终止。

7
我的Qt程序(使用g++ 4.4.0编译)在我关闭它时会出现Microsoft Visual C++ Runtime Library错误“此应用程序已请求终止运行方式不同的运行时”。但是当我在调试器中运行它时,我没有收到错误消息。有谁知道如何获取有关崩溃的一些信息?消息框只有一个“确定”按钮。
编辑后添加:根据Wimmel的建议,我附加了调试器。还有两个线程仍然存活,ThreadID为1和3。堆栈看起来像这样:
Level Function              File                           Line Address
0     VTagOutput            C:\Windows\syswow64\user32.dll 0    0x7529438d  
1     VTagOutput            C:\Windows\syswow64\user32.dll 0    0x7529438d  
2     USER32!EmptyClipboard C:\Windows\syswow64\user32.dll 0    0x752a2674  
3     ??                                                   0

Level Function                                    File                          Line Address
0     ntdll!LdrFindResource_U                     C:\Windows\SysWOW64\ntdll.dll 0   0x76f5000d  
1     ntdll!LdrSetAppCompatDllRedirectionCallback C:\Windows\SysWOW64\ntdll.dll 0   0x76fdfabe  
2     ??                                                                        0    0x7b9609b5 
3     ??                                                                        0

也许第二个线程正在显示错误信息?第一个有点奇怪:前两行完全相同。我的代码中没有任何名称中包含TagOutput,据我所知Qt也没有。

1
也许你可以在点击“确定”之前附加调试器,并观察所有线程的堆栈帧,以查看错误来自哪里。 - wimh
你所看到的所有符号都来自系统 DLL。你在构建时是否包含了调试信息? - Alan Stokes
@Alan:是的。我怀疑程序已经结束了,这只是系统的错误报告机制。 - TonyK
2个回答

3

我在使用Qt时只有一次看到过这个错误信息,那是当我第一次尝试搭建Qt开发环境并安装了多个不同版本的MinGW时。似乎我的可执行文件找到并加载了一个与其他所有内容都不兼容的mingwm10.dll版本。我找到并删除了除我想要的版本之外的所有该dll版本,问题就消失了。


我已经找到了它们,而且有六个(!),分别有三个不同的版本。你是如何决定你想要哪一个的? - TonyK
这要看情况而定,但可以试试这个方法。如果你正在使用Qt SDK,那么你可能需要使用SDK中包含的那个库文件。我想到的一个方法是将找到的每个dll文件复制到可执行文件所在的同一目录中,并逐个尝试,直到找到兼容的版本为止,如果确实是这个原因引起的问题。 - Arnold Spence
谢谢你的建议。但是我的路径中只有一个mingwm10.dll文件,并且它是随Qt一起安装的,所以我不认为这可能是问题的原因。与此同时,程序在进行了一些看似无关的更改后停止了崩溃。所以问题可能隐藏在其他地方... - TonyK

0

使用procmon.exe并过滤进程名称和文件访问以查找丢失的依赖项。

我在Qt 5.0.1中遇到了同样的问题。
程序缺少Qt框架中的一些dll文件。
我在以下目录中找到了它们:

<QTINSTALLDIR>\Qt5.0.1\5.0.1\mingw47_32\plugins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接