无法加载使用Ngen为Native Image DLL创建的符号

时间:2016-02-11 14:28:52

标签: debugging pdb native-code ngen

我正在研究崩溃程序,但无法在Visual Studio 2013中加载本机映像DLL的符号。该应用程序是32位并使用.NET 4.0.30319。我通过从模块窗口检查加载到进程中的clr.dll版本来确认这一点。同样从模块窗口,我检查了从哪里加载mscorlib.ni.dll:

clr.dll C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
mscorlib.ni.dll C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll    

我能够成功生成mscorlib.ni.dll的PDB:

Ngen mscorlib.ni.dll output

但是当我尝试通过右键单击mscorlib.ni.dll的堆栈框架并选择加载符号将其加载到VS 2013中时,我收到一条消息,其中显示"未找到匹配的符号文件。夹"

我看了看:

Creating Ngen Pdbs for Profiling Reports/ 并遵循生成PDB的简单指令,因为我只想在此时看到函数调用,

Get the right .net native symols for Windbg

How to get the PDB file for mscorlib.ni.lib (.Net Framework 3.5)

看起来最常见的错误来源是选择正确的位数。我从模块选项卡中知道我正在加载mscorlib.ni.dll的32位变体,再次从我的屏幕截图中,你可以看到我使用的是相同版本的.NET框架和32位版本的Ngen.exe。我为WindowsBase.ni.dll尝试了这个,并且看到了我成功生成PDB但无法加载它的相同行为。

我启用了调试器以及时调试托管和本机代码。

问题:

  1. 我是否使用了错误版本的ngen.exe来创建此PDB?
  2. Visual Studio在尝试加载PDB时会检查什么?
  3. 我需要在VS中启用一些其他设置来调试此类代码吗?
  4. 谢谢!

0 个答案:

没有答案