如何获取mscorlib.ni.lib的PDB文件.. Net Framework 3.5)

本文关键字:文件 PDB Net Framework ni 何获取 获取 mscorlib lib | 更新日期: 2023-09-27 18:04:33

我查了很多,还是找不到这个问题的答案。

我有一个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"

结果如下:

  1. 我无法在文件夹"C:'Windows' microt.net 'Framework64'v3.5"中找到ngen.exe
  2. 我可以在文件夹"C:'Windows'Microsoft"中找到ngen.exe。. NET'Framework64'v2",但没有createpdb选项。
  3. 我可以在文件夹"C:'Windows' microt.net 'Framework64'v4.0.30319"中找到ngen.exe,它确实支持createpdb选项,但报告错误。

Microsoft (R) CLR原生图像生成器-版本4.0.30319.18408版权(c)微软公司。版权所有。无效的在原生图像中找到标题"C: ' Windows '会议' NativeImages_v2.0.5077 _64 ' mscorlib ' 5 cd1c2848ff40eb0a8c149706ee394fa ' mscorlib.ni.dll"。未指定错误(Exception from HRESULT: 0x80004005 (E_FAIL))

所以我不知道如何获得这个mscorlib.ni.dll的pdb。

任何想法?

如何获取mscorlib.ni.lib的PDB文件.. Net Framework 3.5)

我有同样的错误信息,直到我意识到我从框架64文件夹调用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位)。我的miniidump是64位的,所以我必须进入Framework64文件夹并从那里运行ngen,它很好。我最初得到了与这里描述的相同的ngen错误(在本机图像中发现无效头…E_FAIL),因为我在框架文件夹中而不是Framework64文件夹(facepalm)。

然而,即使ngen命令工作…在我的场景中,最终生成的pdb仍然不被VS 2013接受为匹配的符号文件。