1.打开windbg,加载dump。使用命令确定dump的clr版本:lm vm mscorwks 或者lm vm clr(!eeversion可以查看加载后的sos版本)

2.找到对应的mscorwks.dll文件,命名为:mscordacwks_AMD64_AMD64_2.0.50727.5477.dll

mscordacwks_X86_X86_2.0.50727.5477.dll

3.把上面的文件放到符号目录:mscordacwks_AMD64_AMD64_2.0.50727.5477.dll\5265C8EE99d000,注意5265C8EE99d000可能有变化,网上说,有的是:4E1545829a3000

此值可以通过下面步骤看到

4.命令行输入:

!sym noisy

.cordll -ve -u -l

!CLRStack

如果mscordacwks没有加载成功,会看到下面错误,其中红框中的就是对应的路径。

5.加载后,可以通过!eeversion查看版本。

如果上述步骤还有问题,请参考下面6步,确保 windbg 成功调试 .net:

1、windbg 的版本一致。

分析时、dump内存时的 windbg 版本一致,且保证是完整的内存文件。使用 .dump /ma c:dump.dmp 执行

2、检查 CLR的版本要一致。

检查 mscorwks.dll (#2.0) 或 clr.dll (#4.0) 版本正确。使用 lm vm mscorwks 或 lm vm clr 检查,看输出内容中是否有 # M C 之类的,存在则表示文件不匹配。

.cordll -ve -u -l :clr版本

3、加载了正确的扩展命令。

检查加载的扩展是否为: psscor2.dll (#2.0) psscor4.dll (#4.0) 。使用命令 !threads 检查扩展是否正常工作。

psscor2 下载地址: http://www.microsoft.com/download/en/details.aspx?id=1073

psscor4 下载地址: http://www.microsoft.com/download/en/details.aspx?id=21255

4、如果步骤3 执行失败,则检查 和CLR版本相同的DAC(Data Access Component)是否正确。

将dump机器上(或其他机器上同版本的 mscordacwks.dll)拷贝到windbg.exe 同目录,并命名为:mscordacwks_xPP_xPP_2.0.50727.vvvv.dll,

关于此问题的说明见: “Failed to load data access DLL, 0×80004005” – OR – What is mscordacwks.dll?

5、确认 CLR  版本。

使用 lm vm mscorwks (#2.0) 或 lm vm clr (#4.0) 来确认 CLR 版本。

CLR 2.0 版本历史:     http://blogs.msdn.com/b/dougste/archive/2007/09/06/version-history-of-the-clr-2-0.aspx

CLR 4.0 版本历史:     http://blogs.msdn.com/b/dougste/archive/2011/09/30/version-history-of-the-clr-4-0.aspx

6、顺带说一个非常强大的调试托管代码的扩展命令。

SOSEX     : http://www.stevestechspot.com/

========================================================================

总结:

1、上述 6步 是”确保windb成功调试.net“的前提,每一步都非常重要。切记,切记!

2、关于CLR的版本列表,外国大牛就是总结的好,方便查找,应该为.net调试常备之利器。

3、除了 sos.dll 进行托管调试外,还有2款瑞士军刀可用: psscor2 / sosex

Windbg SOS 加载技巧(.net framwork 2.0)的更多相关文章

  1. windbg sos加载相关

    使用windbg 加载sos.dll时,经常碰到报The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.d ...

  2. WinDBG中加载SOS和CLR

    WinDBG中加载SOS和CLR 最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能 ...

  3. 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。

    问题描述:在VS中运行一个C#程序,出现错误: 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项.试 ...

  4. Windows调试学习笔记:(一)WinDBG中加载SOS和CLR

    最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能是代码惊醒了优化和签名)之后,决定 ...

  5. windbg在加载模块时下断点

    假设我们希望在加载特定的dll时中断调试器,例如,我想启用一些SOS命令,而clr还没有加载,当您遇到程序中过早发生的异常,并且您不能依赖手动尝试在正确的时间中断时,这尤其有用.例如,在将调试器附加到 ...

  6. 发布我的图片预加载控件YPreLoadImg v1.0

    介绍 大家好!很高兴向大家介绍我的图片预加载控件YPreLoadImg.它可以帮助您预加载图片,并且能显示加载的进度,在预加载完成后调用指定的方法. YPreLoadImg控件由一个名为PreLoad ...

  7. windbg加载符号表

    0x00 前言 在使用windbg调试windows中的程序时会经常碰到一些系统的dll里面的一些函数调用,有些函数是没有具体函数名的,这对于调试非常不利,基于此,微软针对windows也发布了很多系 ...

  8. CLR探索应用程序域世界(上):Windbg SOS剖析揭示域世界

    在CLR的世界中,有一系列的令人Amazing的技术和架构.其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究. 编程人员在 ...

  9. CLR探索系列:Windbg+SOS动态调试分析托管代码

    http://blog.csdn.net/garyye/article/details/4788070   在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心.譬如查看一个托管堆或者计 ...

随机推荐

  1. webpack项目打包配置

    webpack.config.js 文件中,其中“plugins”最为重要 var path = require("path"); const webpack = require( ...

  2. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

  3. python全栈开发day60-django_app ORM 完整登录案例

    day60 内容回顾: 1. HTTP协议: 1.请求(浏览器发给服务端的消息——request) 请求方法 URL 协议版本\r\n k1:v1\r\n k2:v2\r\n \r\n 请求体 —— ...

  4. MySQL事务提交过程(一)

    MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提交过程. MySQL体系结构 由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交 ...

  5. 51Nod1367 完美森林 贪心

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1367.html 题目传送门 - 51Nod1367 题意 有一棵N个点的树,树中节点标号依次为0,1 ...

  6. HDU3718 Similarity KM

    原文链接http://www.cnblogs.com/zhouzhendong/p/8284763.html 题目传送门 - HDU3718 题意概括 直接描述输入吧 首先一个T(T<15),表 ...

  7. BZOJ3240 [Noi2013]矩阵游戏 矩阵 快速幂 卡常

    原文链接http://www.cnblogs.com/zhouzhendong/p/8084891.html 题目传送门 - BZOJ3240 题意概括 F[1][1]=1F[i,j]=a*F[i][ ...

  8. sql 把一个用逗号分隔的多个数据字符串变成一个表的一列

    USE [tms]GO/****** Object: UserDefinedFunction [dbo].[StrToTable] Script Date: 2017/4/26 9:06:20 *** ...

  9. 环形链表(给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null)

    思想: 思想:用快慢指针先判断是否有环,有环则 假设头结点到环入口距离为n,环入口到快慢指针相遇结点距离为m,则慢指针走的路程 为m+n,而快指针走的路程为m+n+k*l (k*l表示绕环走的路程), ...

  10. Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因

    Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因 原因之1: 例如有这样的一个包和它的模块: Test __init__.py Mod ...