斯柯达老明锐遥控器汽车钥匙换电池子磁(全过程)

加载SOS调试器扩展

SOS调试器扩展的DLL(sos.dll)与程序使用的CLR版本是相关的。因此,在发布每个CLR的主版本的同时,会发布一个新版本的SOS调试器扩展,以确保这个DLL可以使用该版本CLR的新功能。SOS调试器扩展是作为运行时的一部分发布的,它位于以下路径:

 

我们可以在上面的路径中指定需要调试哪一个框架版本,并且通过元命令load将它传递给调试器。例如,在我的系统上可以使用以下调试器命令来加载与CLR 2.0版本相对应的SOS:

 

为什么需要多个版本

为什么需要多个版本的SOS调试器扩展?因为SOS调试器扩展需要了解CLR的内部细节,所以每当对CLR进行修改或者增强时,就必须生成一个新版本的SOS。

刚才给出的方法或许有些困难,因为需要找出应用程序所使用的CLR的正确版本,还要输入很长的路径。要解决这个问题,我们可以使用另一个元命令loadby。元命令loadby的语法如下所示:

 

元命令loadby将尝试找出由ModuleName指定的路径(通过查看进程中的已加载模块列 表),并且使用这个路径来加载指定的DLLName(调试器扩展的DLL)。在前面已经指出SOS调试器扩展与CLR版本是相关的,如果可以找到一个模 块,并且SOS调试器扩展与这个模块位于同一个目录,那么就可以使用loadby命令来加载SOS调试器扩展。假设正在查找的模块是mscorwks,这 是CLR的主要引擎之一,那么只需执行以下命令:

 

然后,调试器引擎将加载正确版本的SOS调试器扩展。

如果mscorwks模块还没有被加载,那么元命令loadby将提示以下错误信息:

 

如果需要在加载mscorwks模块时立即加载SOS调试器扩展,那么可以使用sxe命令。命令sxe用于控制在目标应用程序中的异常行为。我并不 打算介绍命令sxe的所有选项,但其中有一个选项sxe ld是非常有用的,这个选项可以使得在加载某个特定的模块后,立即中断进入到调试器。我们可以通过sxe ld命令来告知调试器,当mscorwks被加载时中断调试器,然后加载SOS调试器扩展,如清单3-6所示。

清单3-6在mscorwks.dll被加载后立即加载SOS调试器扩展

 
 

从清单3-6中可以看出,当mscorwks被加载时,调试器中断执行,这样我们便可以通过元命令loadby来加载SOS调试器扩展。

SOS与Silverlight

Silverlight使用了自带的CLR,这个CLR是经过裁剪之后的版本,位于coreclr.dll中。如果要使用非托管调试器来调试 Silverlight程序,那么必须下载正确版本的SOS调试器扩展。在 Silverlight 开发运行时中包含了在Silverlight中使用的SOS,下载网址为http://www.microsoft.com/silverlight/resources/tools.aspx

在安装后,用于Silverlight的SOS调试器扩展位于Silverlight的安装文件夹中。例如,在我的机器上,这个文件的位置是:

posted @ 2012-05-15 00:11  读书  阅读(521)  评论(0编辑  收藏  举报