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)
CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应的更多相关文章
- vs2012调试时为什么会出现clr.dll与mscordacwks.dll版本不匹配
第一次开发wpf程序,就遇到了上述问题,最后发现是因为vs2012默认用的是.net4.5,将版本改为.net4就好了,问题解决
- visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
问题描述 “Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3. ...
- dll文件反编译,c#、vb动态库反编译
最近开发遇到一个项目,对方提供一个c#编写的动态库,图片处理需要调用该动态库方法,发现一张图片处理起来需要5s时间,对方无法提供有效解决手段,抱着试一试的想法反编译的对方的动态库,发现其中问题. 一下 ...
- (转)解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题
解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题 开发人员提交一个dump文件(Windows Server 2008 R2),当前调试环境Windows Serve ...
- WinDbg常用命令系列---.cordll (控制CLR调试)
.cordll (控制CLR调试) 简介 .cordell命令控制托管代码调试和Microsoft.NET公共语言运行库(CLR). 使用形式 .cordll [Options] 参数 Options ...
- VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号
VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号,下载一些.dll文件,点取消后也能继续调试,但特别慢.解决方法:工具-选项,或者调试-选项和设置,将调试下的& ...
- (转)VS2010启动调试时老是提示正在下载公共符号
VS2010启动调试时老是提示正在下载公共符号,下载一些.dll文件,点取消后也能继续调试,但特别慢. 解决方法:工具—选项,或者调试—选项和设置,将调试下的“启用 .NET Framework ...
- 在VS2015中用C++编写可被其它语言调用的动态库DLL
转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...
- linux动态库加载时搜索路径
摘自http://gotowqj.iteye.com/blog/1926613 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared librar ...
随机推荐
- AGC035
Contest Page A 唯一会做的题/kk 题目相当于要求相邻三个的异或和为\(0\). 当我们放入了三个数\(a,b,c\)时,接下来的放入顺序显然一定是\(a,b,c,a,b,c,...\) ...
- golang 学习笔记 使用cmd
package main import ( "bytes" "fmt" "os/exec" ) func main() { cmd0 := ...
- Codility MinMaxDivision
最近发现了一个刷题网站:https://app.codility.com/programmers/lessons 这个网站做题目时候的界面让我惊艳到了 首先这是题目界面: 然后点击start, 出来的 ...
- Linux学习笔记之grep命令和使用正则表达式
0x00 正则表达式概述 正则表达式是描述一些字符串的模式,是由一些元字符和字符组成的字符串,而这些元字符是一些表示特殊意义的字符,即被正则表达式引擎表达的字符表示与其本意不同的一些字符. 0x01 ...
- LaTeX转义特殊符号
转义字符在LaTeX中有一些符号被用于特殊的用途,如 \\ \backslash\ 符号被用于命令的转义,直接在LaTeX中输入这些符号是无法正确得到这些符号的,甚至会引起LaTeX的报错. ...
- JAAS configuration for Kafka clients
Clients may configure JAAS using the client configuration property sasl.jaas.config or using the sta ...
- SUSE12SP3-Samba配置
简介 samba官网:https://www.samba.org/ 维基百科: https://zh.wikipedia.org/wiki/Samba Samba,是种用来让UNIX系列的操作系统与微 ...
- pat 1039到底买不买
小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子 ...
- python 常用的标准库
glob模块 提供了一个函数,用于匹配符合要求的文件: import glob list=glob.glob("*.py") #匹配当前目录下的所有匹配的文件名(包括后缀),以 ...
- httpPost请求用java代码实现的方法
原文:https://www.cnblogs.com/johnson-yuan/p/6713384.html package com.day3.sample; //首先下面我我们需要导入的jar包和文 ...