由于msvcp120d.dll导致版本崩溃

时间:2016-05-11 13:52:22

标签: c++ debugging visual-studio-2013 release

我的代码在Release配置中崩溃,但没有在Debug配置中崩溃。它只是这样做,因为我退出程序作为最后一行' return(0);'执行。我在Visual Studio开发环境中工作,当它崩溃时,VS studio为我提供了“调试”的选项。代码。当我选择它时,会弹出一个错误对话框,弹出说:

  

myapp.exe中0x00007FF851A0512D(msvcp120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF。

当我选择'打破'发生此异常时,它会突出显示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;
    }

尤其是,&#39; _Alproxy.destroy(this-&gt; _Myproxy);&#39;被强调为罪魁祸首。

我认为问题可能在于我的发布&#39;代码以某种方式链接到&#39; debug&#39; msvcp120d.dll库,因为它在弹出的第一个对话框中突出显示 - 但这可能只是因为我开始使用VS调试器来识别此问题。但即使这是问题所在,我也不确定如何告诉VS使用msvcp120.dll进行Release配置和使用msvcp120d.dll进行Debug配置。

(为了记录,我使用发布配置中的&#39;多线程DLL(/ MD)&#39;标志生成我的所有代码,以及&#39;多线程调试DLL(/ MDd)&#39;在Debug配置中)

踢球者是当发布版本崩溃时,进程会进入“暂停”状态。州和我无法通过任务管理器完全杀死它。然后,我甚至无法在不重新启动计算机的情况下重新编译新的Release版本!

我不知道如何隔离这个问题。任何人都可以告诉我如何解决这个问题吗?

更新

这个项目的代码非常大 - 所以将它提炼成具有相同行为的最小版本,同时通常是跟踪错误的有效方法,这将是一项相当大的任务。我希望有一些方法来记录进程并找出哪一个正在调用msvcp120d.dll @Niall,我生成了依赖图,这是巨大的。在不提供任何专有权的情况下,附加是图表的全局视图 Dependency graph of entire solution 有没有工具可以跟踪调用msvcp120d.dll的工具?

1 个答案:

答案 0 :(得分:2)

@Niall谢谢! Dependencywalker.com上的软件太棒了。我能够使用它来确定导致问题的库并追踪错误。事实证明,我之前(几个月前,愚蠢地)设置了该库的调试版本的系统路径。因此,即使我的项目被正确指向链接到库的发行版本,在运行时,我的可执行文件也链接到* .dll文件的调试版本!

我删除了路径变量,现在确保正确的* .dll文件的副本位于我的Release或Debug目录中。然后它全部运行并关闭。

感谢所有提供帮助的人。