c++ - 没有 msvcr100d.dll 的来源!__CrtDumpMemoryLeaks()

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

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

在选项 Solution->Common Properties->Debug Source Files 下,更新了 crt 源的正确位置。

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

谁能帮我弄清楚哪里出了问题?

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

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

虽然断点仍然有效,但我列出了所有符号加载信息。我意识到 msvcr100d.i386.pdb 与 dll 不匹配。实际上,它一直向下从 Microsoft 公共(public)符号存储区获取,当然该存储区的符号已被删除。所以这是我问题的根本原因。

social.msdn 中也有类似的问题

最佳答案

您可以在中断处于事件状态时使用“调试”+“Windows”+“模块”查看问题的原因。右键单击 msvcr100d.dll 并选择“符号加载信息”以获取有关调试器使用的 .pdb 的信息。

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

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

关于c++ - 没有 msvcr100d.dll 的来源!__CrtDumpMemoryLeaks(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10008103/

相关文章:

c++ - c++ 17 中结构自动定义构造函数的规则是什么?

C++ L"whatever"-> wstring -> basic_string<T>

visual-studio-2010 - 如何在 Visual Studio 2010 中固定选项卡式文档?

c - 奇怪的 MEX 文件行为

java - 在 Eclipse 中调试 Web 应用程序

matlab - 下标索引必须是实数正整数或逻辑,通用解

c++ - 在 MPI 中拆分和传递数组 block

c++ - <queue> 的 emplace 和 push 的区别

.net - Visual Studio 错误地报告未安装 Web 部署提供程序 (SQL Azure)

c - 我正在使用 Matlab 编码器开发 DLL。我需要为创建的 DLL 填写属性和详细信息,如版权、文件版本、产品名称等