我正在使用 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 打开它。我可以选择“仅使用 Native 进行调试”,但我得到了很多对像你这样聪明的人有意义的东西,而我并不聪明!我得到这两个屏幕:
所以,我的问题:
如何向我的源代码显示 Visual Studio?
另外,有没有办法获得更小的转储文件?它看起来大得离谱,即使在压缩之后也是如此。我不明白为什么不能有一个只比程序的占用空间大一点点,并且仍然可以通过源代码进行很好的调试。