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

Is there a way to debug a release version when loading dlls?

我正在使用 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:

我创建了一个转储文件以使用 visual studio 调试器打开它,它显示应用程序在加载 opencv_imgproc300.dll 之前加载 dll 时停止。

我尝试查看事件查看器,但没有发现此错误。

有没有什么方法可以在加载dll时在启动时调试release版本,从而知道问题的原因是什么?

经过一番努力,我解决了问题,是因为opencv_imgproc300.dll被损坏了,它有真实的大小,但里面被损坏了,我用dependency walker检查,发现两者之间有很大差异应用程序文件夹中的 linked DLL 和原始 dll 文件。 总结一下,如果你想在启动时调试一个发布版本,你有很多方法。我们将描述其中的两个:

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

  2. 使用Dependency walker,你用这个工具打开你的发布版应用程序,你会发现是否有任何损坏或丢失的启动时需要的dll(它被标记为红色dependency walker 中的颜色)。如果你的应用程序是 64 位构建的,你应该使用 dependency walker 的 x64 版本。如果是x86,就应该使用x86版本的dependency walker。如果你使用 x86 版本打开你的 x64 版本的应用程序,你可以看到一些与 linking with system DLL in their x86 version 相关的虚假错误,但不要关心它,这是一个错误Dependency Walker 本身。