使用 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/