我想找到如何进行.Net托管可执行文件的崩溃转储,然后在Visual Studio 2008中打开生成的.dmp文件。我希望查看源代码中抛出异常的位置,调用堆栈以及堆栈中函数的变量值。从Visual Studio 2008中调试.DMP文件为.Net托管应用程序
为了简化问题,我写了一个小应用程序的崩溃:
...
class Program
{
static void Main(string[] args)
{
int a = 2; //Variable I want to see value for when debugging
if (!File.Exists(@"C:\Crasher\bin\Debug\file.txt")) //Doesn't exist
throw new FileNotFoundException(); //Unhandled exception thrown
}
}
...
我做了一个DEBUG构建并运行它从在Visual Studio之外。在windbg中,我点击“附加到进程”并选择我的应用程序。然后我在windbg命令窗口中输入:
.dump /ma C:\crasher\bin\debug\dump.dmp
然后我在Visual Studio中打开.dmp文件。我去工具 - >选项 - > Debugging->符号,并添加以下内容:
http://msdl.microsoft.com/download/symbols (saved to local folder)
这给了我符号在所有模块窗口(如Kernel32.dll中所列的DLL,GDI32.DLL - 我认为所有列出的都是本地的),但mscorlib.ni.dll除外。 Microsoft Symbol Server为我提供mscorlib.dll的符号版本和.pdbs,但不包含mscorlib.ni.dll。
当我尝试为我的.exe本身加载.pdb时,它告诉我它不匹配应用程序。我认为这是因为.exe被管理,我们还没有它下面的所有本地代码的符号 - 即如果我可以得到一个符号构建和msdblib.dll的pdb,这将工作。
这个推理是否正确?我错过了别的吗?
无论哪种方式,为什么mscorlib.ni.dll在Microsoft Symbol Server上不可用,我可以在哪里获得符号信息,以及是否有其他任何我应该知道的有关通过Visual Studio中的崩溃转储调试托管代码的信息。
非常感谢 - 任何帮助将不胜感激。
菲尔·惠廷顿
是不是JIT编译代码的dmp?这会工作吗? – 2010-11-15 10:47:46
我不认为这是可能的。 – 2010-11-15 10:52:47
什么工作?我使用/ ma参数传递给windbg .dump命令,如下所示: .dump/ma C:\ crasher \ bin \ debug \ dump.dmp 我在Visual Studio中非常接近以至于无法相信它是不可能。各种在线资源暗示它可能,而不是在我需要采取的步骤中进行彻底的接触。 感谢您的意见 – 2010-11-15 10:53:10