9
votes

After doing a lot of search, I still couldn't get the solution for the question.

I have a mdmp file. The call stack shows it is using mscorlib.ni.dll. So to get the function information, I need to get its pdb file.

The version of mscorlib.ni.dll is 2.0.50727.3655. I believe it comes from .Net Framework 3.5.

Since mscorlib.ni.dll is the native optimized dll which is generated by ngen.exe, so I need to use ngen.exe createpdb to generate pdf for this dll.

ngen.exe createpdb "C:\Windows\assembly\...\mscorlib.ni.dll" "C:\SymbolCache"

Here is the result:

  1. I can't find ngen.exe in folder "C:\Windows\Microsoft.NET\Framework64\v3.5"
  2. I could find ngen.exe in folder "C:\Windows\Microsoft.NET\Framework64\v2", but it does not have createpdb option.
  3. I could find ngen.exe in folder "C:\Windows\Microsoft.NET\Framework64\v4.0.30319" and it does support createpdb option, but it reports error.

Microsoft (R) CLR Native Image Generator - Version 4.0.30319.18408 Copyright (c) Microsoft Corporation. All rights reserved. Invalid header found in native image 'C:\Windows\assembly\NativeImages_v2.0.507 7_64\mscorlib\5cd1c2848ff40eb0a8c149706ee394fa\mscorlib.ni.dll'. Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))

So I have no idea how to get the pdb for this mscorlib.ni.dll of Net Framework 3.5.

Any idea?

2
not sure if it matters, but you run ngen ver Version 4.0.30319.18408 on an assembly from .net 2.0.507 (based on this C:\Windows\assembly\NativeImages_v2.0.507). try to use the ngen of the same version.Califf
The same version "ngen" 2.050727 does not support "createpdb" argument.Buzz

2 Answers

9
votes

I had the same error message until I realized I call ngen.exe from the Framework64 folder. Apparently, the mscorlib.ni.dll was not 64-bit.

So I used the 32-bit version of ngen.exe from the folder C:\Windows\Microsoft.NET\Framework\v4.0.30319 and it successfully produced the PDB.

However, the path to your mscorlib.ni.dll includes ...\NativeImages_v2.0.507 7_64\..., which indicates it is 64-bit, so this might be a different issue.

1
votes

Like the answer from Monsignor, for me the solution was to match the bit-ness (64-bit or 32-bit). My minidump was 64-bit so I had to go to the Framework64 folder and run ngen from there and it was fine. I originally got the same ngen error as described here (Invalid header found in native image...E_FAIL) because I was in the Framework folder instead of the Framework64 folder (facepalm).

However, even though the ngen command worked...the pdb that was generated ultimately was still not accepted by VS 2013 as a matching symbol file, in my scenario.