zoukankan      html  css  js  c++  java
  • 加载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的安装文件夹中。例如,在我的机器上,这个文件的位置是:

  • 相关阅读:
    使用Apache的ab工具进行压力测试
    Effective Java开篇
    mysql删除同一表中重复字段记录
    正则表达式的元字符匹配
    几个学习git的地方
    创建和销毁对象
    遇到多个构造器参数时要考虑用构建器
    Java的类和接口
    转:流言粉碎机:每天对着电脑46小时的人必看
    页面选中文字弹出层,点击层中文字或者图片触发事件
  • 原文地址:https://www.cnblogs.com/dushu/p/2500808.html
Copyright © 2011-2022 走看看