zoukankan      html  css  js  c++  java
  • CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应

    大家都知道,在调试托管代码时,一定会加载到sos/clr/mscorwks/mscordacwks这些动态库,才能够很好的完成我们的调试工作,那么他们的版本对应关系是怎样的呢,特别是clr.dll/mscorwks.dll有什么关系呢?

    clr是通用语言运行时库,对应的就是clr.dll/mscorwks.dll,在clr发展过程中,文件名发生了变化,他们的版本对应关系如下:

    .NET framework 版本CLR 版本CLR 文件名
    1.1 1.1 mscorwks.dll
    2.0 2.0 mscorwks.dll
    3.0 2.0 mscorwks.dll
    3.5 2.0 mscorwks.dll
    4.0 4.0 clr.dll
    4.5 4.0 clr.dll

    我们在进行托管代码调试时,还会使用到sos.dll和mscordacwks.dll这两个动态库:

    • SOS.dll
      SOS 调试扩展 (SOS.dll) 通过提供有关内部公共语言运行时 (CLR) 环境的信息,帮助你在 Visual Studio 和 Windows 调试器 (WinDbg.exe) 中调试托管程序。
    • mscordacwks.dll
      这是进行调试的数据访问组件 (DAC) 。SOS和CLR调试器使用 Data Access Component (DAC)来实现进程外调试,DAC原则上可以视做CLR执行引擎的子集。它能用在转储文件上,甚至是在CLR未安装的机器上面工作,其实现主要包括一组宏和模板,结合执行引擎代码的条件编译。当编译runtime时,clr.dll和mscordacwks.dll同时生成。为了检索对象,DAC可以读取其内存,获取mscordacwks中VM代码的输入。 然后,它可以在宿主机中运行相应的函数来计算有关托管结构所需的信息,并将最终结果返回给调试器。
      请注意。DAC需要读取对象进程的内存。调试进程和调试对象进程是独立的,地址空间也是独立的。因此需要清楚的区分对象内存和宿主(调试器)内存。在宿主进程中使用目标地址结果无法预料,通常情况下是错误的结果。当使用DAC检索目标内存时,在正确的地址空间中使用目标地址时十分重要的,此外,有时目标地址严格用作数据,在这种情况下,使用主机地址同样不正确,比如,要显示一个托管函数的信息,可能需要列出开始的地址,地址大小。当在VM文件夹下编辑DAC可能运行的代码时,需要正确的选择宿主地址或者目标进程地址。

    请注意  对于所有版本的.NET Framework 中,该 DAC 的文件名是 mscordacwks.dll,,SOS 调试扩展的文件名为 sos.dll。

    若要验证 mscordacwks.dll 版本与应用程序使用的 clr 的版本相匹配,请输入以下命令以显示有关已加载的 CLR 模块信息之一:

    • lmv mclr (适用于 CLR 版本 4.0)
    • lmv mscorwks (适用于版本 1.0 或 2.0 CLR)
  • 相关阅读:
    Memcached Tip 1:使用Memcached Providers
    MVC TIP8:为控制器增加有参构造函数(为了注入等其它用途)
    压力测试的轻量级具体做法
    Memcached Tip 2:Session同步
    ASP.NET性能优化之分布式Session
    ASP.NET性能优化之让浏览器缓存动态网页
    最精简领域驱动设计开发模版(针对WPF)
    MOQ TIP1:简介加基础
    ASP.NET性能优化之减少请求
    MOQ TIP2:匹配参数
  • 原文地址:https://www.cnblogs.com/yilang/p/12015091.html
Copyright © 2011-2022 走看看