其实Production Debugging是针对Development Debugging而言的,他们的环境上有很大区别区别:

1、  Tools。在开发环境下,通常有IDE、源码还有调试版本的库文件。可是在生产环境下,一般来说没有IDE可用,面对的也是Release版本的程序。如果有pdb或者dbg文件,可能会有帮助(http://support.microsoft.com/default.aspx?scid=kb;en-us;Q121366 “PDB and DBG Files – What They Are and How They Work”)。在生产环境下用到的调试工具就是Debugging Tools for Window工具集了,可以从http://www.microsoft.com/ddk/debugging下载。

2、  Actions。在生产环境下,不能像在开发环境下可以采用任何调试手段,因为需要在执行调试的时候还保证系统的运行。

还有就是Production Debugging最重要的目标是让系统能够正常运作起来,其次才是找到问题的根源;另外,Production Debugging的时间需求通常很紧迫,因为越晚调试完成,失去的revenue就越多。



 

使用的调试工具

调试一个问题通常分为两个阶段。最初的阶段是来收集问题的各种信息,然后进入调试阶段,来决定问题的原因。这两个阶段需要不同的工具。

发现阶段

这个阶段的目标是获取服务器的状态然后让服务器继续工作。通常用到的操作系统工具为:

l         Task Manager(任务管理器)。可以看到一些系统性能指标,比如CPU利用率、内存使用率和虚拟内存的大小。

l         System Monitor(Performance Monitor,性能监视器)。可以用来记录一些性能计数。

还有一些工具可以使用的是:

l         Autodump+(ADPlus),是一个用VBScript写的脚本,主要用来收集事后数据。(“Use AutoDump+ to Troubleshoot ‘Hangs’ and ‘Crashes,’”
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q286350

l         ADPlus_AspNet.vbs,是ADPlus的一个修改版本,可以附加到IIS上。后面会有讲述。

l         ADPlust_KernelExit.vbs,也是一个ADPlus的修改版本,在后面讲述。

l         Allocation Profiler,可以用图形化方式来浏览管理内容分配情况。

调试阶段

事后调试是用工具来分析数据或者程序崩溃的数据。事后调试的一个好处就是可以收集到真实问题发生时候的数据,而不是故障重现。

调试阶段的一些工具有:

l         WinDbg。WinDbg是一个native debugger,可以附加到本地或者远程的进程上,可以在事后分析时帮助分析dump文件。

l         CorDbg。CorDbg是.NET Framework SDK带的一个命令行方式的调试器,它需要三个DLL支持:MSDis130.dll,MSvcP70.dll,MSvcr70.dll。

l         SOS.dll。SOS.dll是一个调试器扩展,用来显示mananged调用栈和对象数据。当前它只能结合DDK提供的debugger(比如WinDbg)工作,如果调试.NET程序,需要有和.NET类型和版本相匹配的.bin文件。

l         SieExtPubl.dll,是用来输出COM线程信息的调试器扩展。

l         Visual Studio.NET。VS.NET可以调试managed和native的代码,还可以调试混合程序,比如加入了script。

下面的表就是各种debugger的能力