【发布时间】:2013-03-06 17:17:32
【问题描述】:
我有一个可以在调试模式下正常工作的 Qt 应用程序,没有任何问题。两天以来,我试图让它在发布模式下工作。经过一些项目属性修改后,我设法编译没有错误。但不幸的是,应用程序在到达 main 方法之前就崩溃了。 这就是我的环境:
- MS VS 2010
- Qt 4.8.4
- Qwt 6.0.0
我不知道这是否相关,但我还为 VS 安装了 Qt 插件并使用 Qt Designer 来创建我的 GUI。
正如我在调试模式中所说,没有问题。从 Visual Studio 启动发行版会产生以下错误: Application.exe 中 0x77c415de 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000c。
我可以“调试”的最后一个函数是方法“__declspec(noinline) int __tmainCRTStartup”中调用的“WinMain”方法,该方法位于 crtexe.c 中(老实说,我不知道这是什么)。调用堆栈如下所示:
ntdll.dll!77c415de()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77c415de()
ntdll.dll!77c3014e()
msvcr100.dll!718f0269()
msvcr100.dll!718f233b()
msvcr100.dll!718f233b()
msvcr100.dll!718f233b()
QtCore4.dll!5b2cfc49()
QtGui4.dll!57bf54ea()
Application.exe!__tmainCRTStartup() Line 547 + 0x1c bytes C
kernel32.dll!754633aa()
ntdll.dll!77c59ef2()
ntdll.dll!77c59ec5()
此刻我完全被这个问题迷失了。不知道要进一步尝试什么...
我尝试减少程序并注释掉完整的主要功能。但结果是相同的行为。正如我所说,错误甚至在调用主函数之前就发生了。我也关闭了所有优化并重新编译...没有改变任何东西。
让我完全困惑的是,当我从命令提示符调用“Application.exe”时它“工作”(好吧,它也崩溃了,但在执行过程中要晚得多)。很奇怪,不是吗?从命令提示符开始和从 Visual Studio 应用程序开始有什么区别?
【问题讨论】:
-
尝试使用dependencywalker.com 来分析可执行文件的依赖关系。可能原因是混合运行时。让我们检查一下。
-
还要检查你的PATH,可能有其他版本引用qt运行时的路径
-
感谢 AnatolyS 的帮助。我已经从 PATH 系统变量中删除了所有 qt 路径。但没有变化。我还安装了dependencywalker,但不知道如何在那里启动“VS 启动应用程序”。所以我只打开了Application.exe。它说缺少两个 dll:GPSVC.dll、IESHIMS.DLL。不知道这是否相关。明天我会寻找这些DLL。现在必须停下来......
标签: qt release startup access-violation