2015-12-29 64 views
0

我正在开发一个使用Visual Studio 2015,Qt 5.5和OpenCV3.0的64位C++应用程序。该应用程序在用于在Release和Debug版本中开发的电脑上运行良好。但是,同样的应用程序仅在调试上的其他电脑上运行,并在发行版本我收到此错误信息:加载dll时有没有办法调试发布版本?

The application was unable to start correctly 0xc0000005, Click Ok toclose the application: 

enter image description here

我创建转储文件使用Visual Studio调试器中打开它,它表明在加载opencv_imgproc300.dll之前加载dll时,应用程序会停止。

我试着回顾一下事件查看器,但是我没有在那里发现这个错误。

有没有一种方法来调试启动时发布版本加载DLL时知道哪个问题的原因?

+1

最简单的第一步将是在目标电脑上运行的Dependency Walker和它http://www.dependencywalker.com/打开你的EXE – stijn

+1

您可以尝试使用的ProcessMonitor从Sysinternals的套房。没有保证,但它可能会显示一些有用的东西(它肯定会显示很多)。 –

+0

我从sysinternals试过这个:https://technet.microsoft.com/en-us/sysinternals/bb963902.aspx。但它不会显示丢失或损坏的dll。对于dependencywalker,我更好地使用Visual Studio Debugger中的Module窗口,它显示了所有加载的dll和加载顺序,我发现它更有帮助。 – ProEns08

回答

1

经过很大的努力,我解决了这个问题,这是因为opencv_imgproc300.dll损坏,它具有真正的大小,但里面已损坏,我用依赖沃克检查,发现链接的DLL有很大的区别在应用程序文件夹和原始dll文件中。 作为一个总结,如果你想在启动时调试一个发行版本,你有很多方法。我们将介绍其中的两个:

  1. 编译与调试信息的发布版本,并运行应用程序一样,如果它是在Debug版本。如果应用程序在加载DLL之前停止。此DLL可能已损坏或丢失。此链接显示如何使用调试信息编译您的发行版本:How to: Debug a Release Build

  2. 使用Dependency walker,您可以使用此工具打开您的发行版本应用程序,并且您会发现它在启动时是否存在损坏或缺失的dll(它在依赖性漫游器中用红色标记)。如果你的应用程序是用64位构建的,你应该使用x64版本的依赖walker。如果它是x86,则应使用x86版本的dependency walker。如果您使用x86版本打开应用程序的x64版本,则可以看到与在其x86版本中与系统DLL链接相关的一些错误错误,但不关心它,这是Dependency Walker本身中的错误。

+1

重新2:对于x64应用程序使用x64版本的依赖关系walker,x86 x86版本 – stijn

+0

@stijn:是的,我更新了答案。 – ProEns08

相关问题