我正在使用Visual Studio 2010专业版和Windows Vista。
首先,这是我的代码。你可以看到,它会使程序崩溃!
using System;
namespace Crash
{
class Program
{
static void Main(string[] args)
{
string a = null;
if (a.Length == 12)
{
// ^^ Crash
}
}
}
}
程序将在if语句处崩溃。现在,我想找出它是否是在该if语句上崩溃。如果我从Visual Studio中“开始而不调试”,Crash.exe会崩溃。它使用1,356kb的内存。我得到了关闭程序/调试的Vista选项。如果我选择调试,我可以打开Visual Studio的新实例,并指向if语句上的NullReferenceException。这很好。
现在让我假设它在另一台计算机上崩溃,然后我让他们通过任务管理器给我一个转储文件。它有54,567kb。为什么这么大!太庞大了!无论如何,我对此(略微)不太感兴趣。
如果我使用Windbg打开该转储文件,对于我这个没有经验的人来说,几乎没有什么有用的信息:
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\Users\Richard\Desktop\Crash.DMP]
User Mini Dump File with Full Memory: Only application data is available
Symbol search path is: SRV*C:\SYMBOLS*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows Server 2008/Windows Vista Version 6002 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS Personal
Machine Name:
Debug session time: Sat Jan 15 11:07:36.000 2011 (UTC + 0:00)
System Uptime: 0 days 4:24:57.783
Process Uptime: 0 days 0:00:05.000
........................
eax=002afd40 ebx=77afa6b4 ecx=002afd48 edx=00000001 esi=001cdaa4 edi=00000000
eip=77bf5e74 esp=001cda5c ebp=001cdacc iopl=0 nv up ei ng nz ac pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297
ntdll!KiFastSystemCallRet:
77bf5e74 c3 ret
然而,这对我来说不太重要。据我所知,我需要编写命令以获得有用的输出,Visual Studio更好用。
因此,我使用Visual Studio打开它。我可以选择“仅调试本地代码”,但是我看到了很多对聪明人有意义的东西,而我不聪明!我得到了这两个屏幕:
那么,我的问题是:
如何将源代码显示在Visual Studio中?
此外,是否有一种方法可以获取较小的转储文件?即使经过压缩,它似乎也非常大。我不明白为什么不能只有一个比程序占用空间稍微大一点的文件,仍然能够得到带有源代码的良好调试。