2012-04-04 43 views
1

使用Visual Studio 2010调试C++项目时,它找不到crt的源代码。当我试图进入一个这样的模块时,它显示“No Source Available”。它也不提供Browse的选项,以便我可以帮助它找到源位置。没有msvcr100d.dll!的源代码__ CrtDumpMemoryLeaks()

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

由于缺乏crt的源代码级别的调试,我必须通过反汇编来阅读这些变得越来越困难。

任何人都可以帮我弄清楚可能会出错吗?

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

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

虽然断点仍然有效,但我列出了所有符号加载信息。我意识到msvcr100d.i386.pdb与dll不匹配。它实际上一路走下来从微软的公共符号存储中获取,当然这些符号被剥离掉了。所以这是我的问题的根源。

这里是在social.msdn

回答

1

您可以在休息活动时使用Debug + Windows +模块查看问题的原因。右键单击msvcr100d.dll并选择“Symbol Load Information”以获取有关调试器使用的.pdb的信息。

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

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

+0

谢谢您的回应。部分改变编译器开关会有点困难,因为它可能会改变行为,并且完全因为我正在使用外部构建系统。但是这样说,你所说的是对我有意义的。时间戳不匹配可能是可能的。我认为connect.microsoft.com会是这个查询的理想选择。再次感谢你。 – Abhijit 2012-04-04 12:38:10

+0

这不是时间戳不匹配。该.pdb有所有源文件和行信息被剥离。对于在发布模式下构建的DLL,这是非常典型的,例如,Windows DLL的所有.pdbs都是以这种方式发布的。一点都不,因为你没有任何源代码。但它不是一个发布模式DLL,你有源:)可能是一个愚蠢的错误,连接可以告诉你。 – 2012-04-04 12:43:36

+0

宾果:-)你是对的。我想在pdb和dll之间不匹配的时间戳,但不相信他们实际上剥离了这些符号。这里是我如何从调试输出'Loaded'C:\ Windows \ SysWOW64 \ msvcr100d.dll',加载符号(去除源信息)来验证它。 – Abhijit 2012-04-04 12:48:54

0

类似的问题,你可以找到的CRT源在安装文件夹,子文件夹VC \ CRT \ SRC。

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

+0

正如我所提到的源代码存在于VC \ CRT \ SRC下,但IDE无法找到它。我想知道如何让IDE知道CRT源的位置 – Abhijit 2012-04-04 11:05:28