【问题标题】:No source for msvcr100d.dll!__CrtDumpMemoryLeaks()没有 msvcr100d.dll 的来源!__CrtDumpMemoryLeaks()
【发布时间】:2012-04-04 09:08:04
【问题描述】:

使用 Visual Studio 2010 调试 C++ 项目时,找不到 crt 的源代码。当我试图进入一个这样的模块时,它显示“没有可用的源”。它也没有提供Browse 的选项,因此我可以帮助它找到源位置。

在选项解决方案->通用属性->调试源文件下,更新crt源的正确位置。

由于缺乏 crt 的源代码级调试,我必须通读越来越困难的反汇编。

谁能帮我弄清楚可能出了什么问题?

请注意**我通过 Visual Studio 使用外部构建系统来构建我的 C++ 项目。

在 Hans 的指导下,我如何缩小问题范围。

当断点仍然处于活动状态时,我列出了所有符号加载信息。我意识到msvcr100d.i386.pdb 与 dll 不匹配。它实际上一直从微软公共符号存储中获取,其中当然已经剥离了符号。所以这就是我的问题的根本原因。

social.msdn也有类似的问题

【问题讨论】:

    标签: c++ visual-studio debugging visual-c++ msvcrt


    【解决方案1】:

    您可以在中断活动时使用 Debug + Windows + Modules 查看问题的原因。右键单击 msvcr100d.dll 并选择“符号加载信息”以获取有关调试器使用的 .pdb 的信息。

    由于某种原因,Microsoft 符号服务器提供了一个已剥离源信息的服务器。这可能是故意的,与 DLL 的服务和安全补丁与 vc/crt/scr 中的源代码不同步有关。通过在 connect.microsoft.com 上发帖,您可以获得真正的答案,而不是猜测

    如果可能的话,一种解决方法是使用 /MTd 而不是 /MDd 编译您的代码。项目 + 属性、C/C++、代码生成、运行时库设置。然后调试器将使用 vc/lib 中的 .pdb 文件。请密切注意,调试代码而不是 CRT。

    【讨论】:

    • 感谢您的回复。更改编译器开关会有点困难,部分原因是它可能会改变行为,完全是因为我使用的是外部构建系统。但是这么说,你说的对我来说是有道理的。时间戳不匹配是可能的。我认为 connect.microsoft.com 将是此查询的理想选择。再次感谢您。
    • 这不是时间戳不匹配。 .pdb 已剥离所有源文件和行信息。这对于以发布模式构建的 DLL 来说是非常典型的,例如,Windows DLL 的所有 .pdb 都是以这种方式交付的。至少不是因为你没有任何源代码。然而,它不是一个发布模式的 DLL,而且你确实有源代码 :) 可能是一个愚蠢的错误,connect 可以告诉你。
    • 宾果游戏 :-) 你是对的。我在想 pdb 和 dll 之间的时间戳不匹配,但不敢相信它们实际上剥离了符号。以下是我从调试输出 Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded (source information stripped). 验证它的方法
    【解决方案2】:

    您可以在安装文件夹的子文件夹 VC\CRT\SRC 中找到 CRT 的源代码。

    如果它们不存在,您在安装 VS2010 时是否安装了它们? (不确定你是否真的可以选择这个)。

    【讨论】:

    • 正如我所提到的,源代码位于 VC\CRT\SRC 下,但 IDE 无法找到它。我想知道如何让 IDE 知道 CRT 源的位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多