有没有办法在加载dll时调试发布版本?

时间:2015-12-29 12:53:35

标签: c++ debugging opencv dll startup

我正在使用Visual Studio 2015,Qt 5.5和OpenCV3.0开发64位C ++应用程序。该应用程序在我用于在Release和Debug版本中开发的pc上运行良好。但是相同的应用程序仅在其他PC上的Debug中运行,而在发布版本中我得到此错误消息:

 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 个答案:

答案 0 :(得分:1)

经过努力,我解决了这个问题,这是因为opencv_imgproc300.dll已损坏,它有真实的大小但内部已损坏,我检查了依赖walker,发现链接的DLL之间存在很大差异Application文件夹和原始dll文件。 总结一下,如果要在启动时调试发行版,可以使用多种方法。我们将描述其中两个:

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

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