我有一个非常令人沮丧的问题,我正在调试我的代码,而对于完整的调用堆栈,我需要获取msvcr120.dll(msvcr120.i386.pdb)的符号。
问题是,我无法得到它。
http://msdl.microsoft.com/download/symbols:符号服务器上找不到符号。
msvcr120.i386.coresys.pdb
msvcr120_clr0400.i386.pdb
那么,有没有办法获得" msvcr120.i386.pdb" ?
答案 0 :(得分:2)
为了获得文件的正确PDB,您需要知道实际加载了哪个模块。如果在运行时创建程序的crashdump(.DMP)(可以使用taskmanager),它应该显示加载的确切文件,包括它的完整路径。您还可以使用依赖于walker的工具,这可以更好地找到完整路径。
获得路径之后,您可以通过右键单击,加载和指向相关的确切文件来专门尝试强制加载该模块的符号。这应该得到正确的哈希并将正确的PDB从MS符号存储加载到本地缓存中。
可能发生的事情是,您正在运行的程序有一个清单,调出DLL的特定SxS版本, OR 您的程序已经崩溃,Windows已将其置于“兼容模式” ”。无论哪种方式,这意味着程序和VS正在寻找DLL的不同版本,因此您遇到了问题。当程序在与您正在调试的计算机不同的计算机上崩溃时,您也可以看到这一点,特别是如果它们并非完全位于Windows更新的同一位置。
如果您经常开发工作,则应禁用Windows自动将内容置于兼容模式。它将为您节省许多麻烦。