大家都知道,在调试托管代码时,一定会加载到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)

CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应的更多相关文章

  1. vs2012调试时为什么会出现clr.dll与mscordacwks.dll版本不匹配

    第一次开发wpf程序,就遇到了上述问题,最后发现是因为vs2012默认用的是.net4.5,将版本改为.net4就好了,问题解决

  2. visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。

    问题描述 “Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3. ...

  3. dll文件反编译,c#、vb动态库反编译

    最近开发遇到一个项目,对方提供一个c#编写的动态库,图片处理需要调用该动态库方法,发现一张图片处理起来需要5s时间,对方无法提供有效解决手段,抱着试一试的想法反编译的对方的动态库,发现其中问题. 一下 ...

  4. (转)解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题

    解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题   开发人员提交一个dump文件(Windows Server 2008 R2),当前调试环境Windows Serve ...

  5. WinDbg常用命令系列---.cordll (控制CLR调试)

    .cordll (控制CLR调试) 简介 .cordell命令控制托管代码调试和Microsoft.NET公共语言运行库(CLR). 使用形式 .cordll [Options] 参数 Options ...

  6. VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号

    VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号,下载一些.dll文件,点取消后也能继续调试,但特别慢.解决方法:工具-选项,或者调试-选项和设置,将调试下的& ...

  7. (转)VS2010启动调试时老是提示正在下载公共符号

      VS2010启动调试时老是提示正在下载公共符号,下载一些.dll文件,点取消后也能继续调试,但特别慢. 解决方法:工具—选项,或者调试—选项和设置,将调试下的“启用 .NET Framework  ...

  8. 在VS2015中用C++编写可被其它语言调用的动态库DLL

    转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...

  9. linux动态库加载时搜索路径

    摘自http://gotowqj.iteye.com/blog/1926613 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared librar ...

随机推荐

  1. Scala 匹配模式

    模式匹配 // Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,类替代switch case,match case也 ...

  2. Java异常的10个关键知识点

    前言 总结了Java异常十个关键知识点,面试或者工作中都有用哦,加油. 一. 异常是什么 异常是指阻止当前方法或作用域继续执行的问题.比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异 ...

  3. JAVA8的java.util.function包 @FunctionalInterface

    1 函数式接口java.util.function https://www.cnblogs.com/CobwebSong/p/9593313.html 2 JAVA8的java.util.functi ...

  4. docker学习之路-nginx镜像(翻译)

    本篇来自https://hub.docker.com/_/nginx/?tab=description 它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等.从这里你可以找 ...

  5. 前端开发常用 JS 方法

    1,获取文件本地url,在上传之前预览 /** * 获取图片嗯滴url,在上传之前预览 * @param file 选择的图片文件 * @returns {*} url */ getFileLocat ...

  6. 【转】Unobtrusive Ajax的使用

    [转]Unobtrusive Ajax的使用 Ajax (Asynchronous JavaScript and XML 的缩写),如我们所见,这个概念的重点已经不再是XML部分,而是 Asynchr ...

  7. 【方法论】5WHY分析法

    一.概述 所谓“5WHY”分析法,又称“5问法”,就是连续反复使用5次“为什么”方式自问,以打破砂锅问到底方式寻找问题的根本原因的方法.“5WHY”不限定必须或只做5次为什么的提问,以找到问题根因为准 ...

  8. css, js 项目练习之网页换肤

    首先,该练习参考自:https://www.jianshu.com/p/2961d9c317a3 我就直接上代码了(颜色可以自己调). HTML: <nav> <li>< ...

  9. Linux相关目录

    Linux 启动流程 Linux--基本目录 Linux--selinux Linux--网卡配置 Linux--系统运行级别 Linux--重要文件

  10. prometheus学习系列四: Prometheus详述

    数据模型 Prometheus 是将所有数据存为时序数据. 每个时序数据是由指标名称和可选的键值对(称之为标签)唯一标识. 度量类型 counter: 单调递增的计数器,如果标识已经服务的请求数量可以 ...