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

标签 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时在启动时调试release版本,从而知道问题的原因是什么?

最佳答案

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

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

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

关于c++ - 有没有办法在加载 dll 时调试发布版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511508/

相关文章:

c++ - 如何在 SystemC 中声明析构函数?

linux - 尝试设置断点时,gdb 无法访问附加进程中的内存

opencv - opencv中是否有用于处理Blob的好的库?

opencv - 在二值图像中定位单词

c++ - 未解析的外部符号(OpenGL 和 C++)

c++ - 如果模板 arg 是 const,则将 const 添加到类型

c - 进程阻塞了哪些调用?

debugging - 是否有任何用于在 Visual Studio 2013 中调试 Qt 4.8 项目的非官方可视化工具?

opencv - 反转实值索引网格

c++ - 多维字符数组