由于msvcp120d.dll,发布版本崩溃

Release version crashing due to msvcp120d.dll

本文关键字:版本 崩溃 布版本 msvcp120d dll 由于      更新时间:2023-10-16

我的代码在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目录中。然后一切都运转起来,一切都很好。

感谢所有提供帮助的人。