博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加载SOS调试器扩展
阅读量:4625 次
发布时间:2019-06-09

本文共 1275 字,大约阅读时间需要 4 分钟。

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,下载网址为。

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

转载于:https://www.cnblogs.com/dushu/archive/2012/05/15/2500808.html

你可能感兴趣的文章
sdnu 1172.Queue 【LIS】
查看>>
Android 查看蓝牙hci日志
查看>>
Sparkcore高级应用一
查看>>
vim vimtutor
查看>>
Jmeter学习笔记12-监听器以及测试结果的分析
查看>>
ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系
查看>>
Python 开发与测试 Webservice(SOAP)
查看>>
结对第一次—原型设计(文献摘要热词统计)
查看>>
selenium +python 对table的操作
查看>>
get提交时中文传值乱码的有关问题
查看>>
网页的MVC模式简介
查看>>
如何使用Linux的Crontab定时执行PHP脚本的方法
查看>>
Git详解之一 Git起步
查看>>
退出游戏行业去考研,可否?
查看>>
Node.js初体验
查看>>
百度之星 1004 Labyrinth
查看>>
crm创建报告补充导航
查看>>
几种开源分词工具的比較
查看>>
等于null和长度0有区别,null不能调用任何方法,如Tostring 和.length 源于checkbox的未勾选返回值为null,勾选的返回值为on...
查看>>
项目管理专业 知识点总结(三)
查看>>