由于msvcp120d.dll,发布版本崩溃
Release version crashing due to msvcp120d.dll
我的代码在Release配置中崩溃,但在Debug配置中没有崩溃。它只是在我退出程序的最后一行"return(0);"执行。我在Visual Studio开发环境中工作,当它崩溃时,VS Studio为我提供了"调试"代码的选项。当我选择它时,会弹出一个错误对话框,上面写着:
myapp.exe中0x00007FF851A0512D(msvcp120d.dll)处出现未处理的异常:0xC0000005:读取位置0xFFFFFFFFFFFFF时发生访问冲突。
当我选择在发生此异常时"中断"时,它会在xstring文件中突出显示以下函数:
void _Free_proxy()
{ // destroy proxy
typename _Alloc::template rebind<_Container_proxy>::other
_Alproxy;
this->_Orphan_all();
_Alproxy.destroy(this->_Myproxy);
_Alproxy.deallocate(this->_Myproxy, 1);
this->_Myproxy = 0;
}
尤其是"_Alproxy.destroy(this->_Myproxy);"被突出显示为罪魁祸首。
我认为问题可能是我的"release"代码以某种方式链接到了"debug"msvcp120d.dll库,因为它在弹出的第一个对话框中突出显示,但这可能只是因为我开始使用VS调试器来识别这个问题。但即使这是问题所在,我也不确定如何告诉VS使用msvcp120.dll编译Release配置,使用msvcp120d.dll编译Debug配置。
(记录在案,我使用发布配置中的"多线程DLL(/MD)"标志和调试配置中的"多线程调试DLL(/MDd)"生成所有代码)
关键是,当发布版本崩溃时,进程进入"暂停"状态,我无法通过任务管理器完全杀死它。然后,如果不重新启动我的计算机,我甚至无法重新编译新版本!
我不知道如何孤立这个问题。有人能建议我如何解决这个问题吗?
更新
这个项目的代码相当大,因此将其提取到一个表现出相同行为的最小版本,虽然通常是跟踪bug的有效方法,但这将是一项相当大的任务。我希望有一些方法来记录进程,并找出哪一个调用msvcp120d.dll@Niall,我生成了依赖关系图,它是巨大的。在不透露任何专有信息的情况下,附件是图形的全局视图
整个解决方案的依赖关系图是否有任何工具可以跟踪调用msvcp120d.dll的对象?
@Niall谢谢!Dependencywalker.com上的软件非常棒。我能够使用它来确定导致问题的库并跟踪错误。事实证明,我之前(几个月前,愚蠢地)设置了该库调试版本的系统路径。因此,尽管我的项目被正确地定向为链接到库的发布版本,但在运行时,我的可执行文件链接到*.dll文件的调试版本!
我删除了路径变量,现在确保正确的*.dll文件的副本在我的Release或Debug目录中。然后一切都运转起来,一切都很好。
感谢所有提供帮助的人。
- OpenGL 在 VMWare Fusion 版本 10.1.3 上安装的虚拟机 (Ubuntu 16.04) 上崩溃
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- 在官方 ZeroMQ 多线程示例的修改版本中崩溃
- Mongodb Cxx 驱动程序测试在发布版本中崩溃 [ 在调试中工作正常]
- 用静态版本的QT编译时,文件对话框崩溃
- Qt 网络引擎调试版本崩溃
- 调用64位C/C++DLL的C#应用程序崩溃,但运行32位版本
- 调试版本仅崩溃
- p = new String [0]和p = new Int [0]之后,为什么当删除[] p时字符串版本崩溃
- 由于msvcp120d.dll,发布版本崩溃
- 为什么我的.exe文件崩溃了,但在调试和发布版本中工作得很好
- glGenBuffers 在发布版本中崩溃
- 程序的守护程序版本崩溃时的查找位置
- PDB无法显示发布版本崩溃的确切行号,但在二进制调试版本的情况下显示精确行号
- 混合 mfc 对话框和 mdi 项目的调试版本中崩溃
- 如何调试仅在发布版本中发生的崩溃
- 我的调试版本dll使用了可重新分发和崩溃的发布版本
- /Visual Studio 2008中二进制崩溃的MT版本-如何调试
- 在发布版本中,iOS 5.1设备上的Xcode 5.1 std::字符串串联崩溃
- 程序只在发布版本构建时崩溃——如何调试