如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件
经过大量搜索之后,我仍然无法获得问题的解决方案。如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件
我有一个mdmp文件。调用堆栈显示它使用mscorlib.ni.dll。所以要获取函数信息,我需要得到它的pdb文件。
mscorlib.ni.dll的版本是2.0.50727.3655。 我相信它来自.Net Framework 3.5。
由于mscorlib.ni.dll是由ngen.exe生成的本地优化dll,所以我需要使用ngen.exe createpdb生成此dll的pdf。
ngen.exe createpdb "C:\Windows\assembly\...\mscorlib.ni.dll" "C:\SymbolCache"
下面是结果:
- 我不能在文件夹ngen.exe找到 “C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V3.5”
- 我能找到文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v2”中的ngen.exe,但它没有createpdb选项。
- 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319”中找到ngen.exe,它支持createpdb选项,但它报告错误。
微软(R)CLR机图像生成器 - 版本4.0.30319.18408 版权所有(c)Microsoft公司。版权所有。无效 在本机映像中找到标头 'C:\ Windows \ assembly \ NativeImages_v2.0.507 7_64 \ mscorlib \ 5cd1c2848ff40eb0a8c149706ee394fa \ mscorlib.ni.dll'。 未指定的错误(异常来自HRESULT:0X80004005(E_FAIL))
所以我不知道如何让PDB此mscorlib.ni.dll .Net框架3.5。
有什么想法?
我有相同的错误信息,直到我意识到我从Framework 文件夹调用ngen.exe。显然,mscorlib.ni.dll不是64位的。
因此,我使用文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319
中的32位版本的ngen.exe,并成功生成了PDB。
但是,mscorlib.ni.dll的路径包括...\NativeImages_v2.0.507 7_64\...
,这表明它是64位的,所以这可能是一个不同的问题。
就像Monsignor的回答一样,对我来说,解决方案是匹配比特位(64位或32位)。我的小型转储器是64位的,所以我不得不转到Framework64文件夹并从那里运行ngen,这很好。我最初得到了与此处所述相同的ngen错误(在本机图像中发现无效头... E_FAIL),因为我在Framework文件夹而不是Framework64文件夹(facepalm)。
但是,即使ngen命令正常工作......在我的场景中,最终生成的pdb仍然未被VS 2013接受为匹配符号文件。
不知道它是否重要,但是您在.net 2.0.507(基于此C:\ Windows \ assembly \ NativeImages_v2.0.507)的程序集上运行ngen ver版本4.0.30319.18408。尝试使用相同版本的ngen。 – Califf
相同版本的“ngen”2.050727不支持“createpdb”参数。 – Buzz