去年底,公司一个上线了近一年的系统逐渐出现访问缓慢,操作超时的问题。本人使用winDBG工具对抓下来的内存映象进行了诊断,虽最后没有查出什么原因,但在过程中也学到了不少东西,现记录如下

一. “Failed to load data access DLL, 0x80004005”错误

这个错误还有另外一种提示:“The version of SOS does not match the version of CLR you are debugging”。

从原理上讲,象winDBG等非托管调试工具,是使用sos.dll模块,通过mscordacwks.dll接口,调用clr.dll实现,最终实现对.Net运行时托管代码的访问。这里有两点需要注意

1. sos.dll,mscordacwks.dll这两个之间的版本必须一致

2. sos.dll与被调用的映象运行时版本必须一致

上面两个有任意一处不一致,都会导致上述的错误信息。对于我,则是服务器是.net 4.0版本,我本机是4.6版本,即报此错误。解决的方案有两个

1. 使用正确版本的各个dll。一般来讲,从服务器除了复制内存映象文件外,还需复制以上两个dll,确保调试成功。至少需要复制sos.dll,winDBG在执行过程中会自动从符号文件服务器下载与当前sos.dll匹配版本的mscordacwks.dll。

2. 使用Psscor4工具。它是sos.dll的进阶版,添加了若干增强工具,会自动判断当前被调试的内存映象,下载正确匹配版本的mscordacwks.dll。推荐使用此方案。

What to do with “The version of SOS does not match the version of CLR you are debugging” in WinDbg?

“Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dll?

The version of SOS does not match the version of CLR you are debugging; SOS.dll版本不匹配; Dump文件不同环境mscordacwks.dll版本问题

windbg配置问题汇总

windbg sos版本不匹配问题解决

.NET应用程序调试—原理、工具、方法

二. 内存泄露是最常见的问题

公司使用的技术框架比较老,大部份仍停留在原生Sql + DataTable的方式上。我的第一反应是查询返回的数据太多,DataTable对象可能占用了过多的内存。下面的文章具体介绍了定位方法。

使用WinDbg+SOS及WinDbg Script寻找内存中DataTable第M行N列的值

使用windbg排查一个内存溢出的问题

抛出的异常过多,不正确的缓存使用也会造成内存的大量浪费

调试.NET Web应用程序High Memory - Part 1

调试.NET Web应用程序High Memory - Part 2

三. 线程死锁也是一个常见问题

使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题

Debugging a Deadlock

四. 最后,熟练掌握各条命令是活用winDBG的基础

《WinDbg 命令三部曲:(一)WinDbg 命令手册》

《WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册》

《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》

winDBG排错小记的更多相关文章

  1. 第二章排错的工具:调试器Windbg(上)

    感谢博主 http://book.51cto.com/art/200711/59731.htm <Windows用户态程序高效排错>第二章主要介绍用户态调试相关的知识和工具.本文主要讲了排 ...

  2. 第二章排错的工具:调试器Windbg(下)

    感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2  读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1  需要用汇编来排错的常见情况 汇编是 ...

  3. 使用PowerShell替代WinDbg在高分辨率笔记本下调试、排错

    最近换新的开发笔记本,分辨率较高发现部分应用在High DPI下几乎没法用.比较纠结的就是WinDbg,频繁切换分辨率.显示文字大小影响工作节奏.幸好PowerShell在High DPI下效果不错. ...

  4. Windbg程序调试--转载

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查 ...

  5. windbg调试.net程序

    1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hard ...

  6. 揪出“凶手”——实战WinDbg分析电脑蓝屏原因

    http://www.appinn.com/blue-screen-search-code/ 蓝屏代码查询器 – 找出蓝屏的元凶 11 文章标签: windows / 系统 / 蓝屏. 蓝屏代码查询器 ...

  7. Windbg(2)

    摘抄于:http://www.cnblogs.com/awpatp/category/228209.html Debug相关的一些小技巧 摘要: 1. 如何Debug一个进程的子进程? 答: 使用Wi ...

  8. 使用Windbg调试.Net应用程序 [转]

    Windbg+Procdump解决w3wp.exe CPU过百问题[转] High CPU Dump收集工具 - ProcDump使用方法[转] ProcDump v9.0[官方] windbg查找c ...

  9. [原]排错实战——解救加载调试符号失败的IDA

    原调试IDA排错troubleshootsymbolspdbsysinternalprocess monitor 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windb ...

随机推荐

  1. Hdu3829 Cat VS Dog(最大独立点集)

    Cat VS Dog Problem Description The zoo have N cats and M dogs, today there are P children visiting t ...

  2. NSString copy && strong

    http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):stro ...

  3. 6.form表单四种提交方式

    一.使用jquery的ajax方式提交: 二.使用easyui的form组件内置的submit方法提交: 三.先定义表单,然后使用submit方法提交: 四.先定义表单,然后按下enter键时提交:

  4. Amoeba变形虫

    我们通过路由选择来决定操作时访问那个数据库,而路由的选择方式不外乎以下几种: 1) SpringAOP方式:spring底层配置多个数据源,配置路由(面向切面编程)手工写很多代码(废除) 2) MyS ...

  5. 使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择

    在上一篇文章中,我们使用了Perfview的分组功能.分组功能旨在对某些函数按照某个格式进行分组,以减少视图中的各种无关函数的数量.但仅有分组还不够,有时我们想将一些函数调用信息按某些条件过滤掉,例如 ...

  6. C# Argument 'picture' must be a picture that can be used as an Icon

    Scenario: 创建了一个WinForm的小程序,希望将它显示在任务栏,所以在工具栏中的“公共控件”里,拖入NotifyIcon控件—notifyIcon1,这个是程序运行任务栏右侧通知区域图标显 ...

  7. 使用Code First建模自引用关系笔记

    原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasRequired:前者(A)包含后者(B)一个不为 ...

  8. 企业项目开发--本地缓存guava cache(2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. AdminCacheKey: package com.xxx.vo.userManagement; /** ...

  9. Linux系统用户与属组管理(3)

    好了,终于要到了管理 Linux 账号的时刻了,对于 Linux 有一定的熟悉度之后,再来就是要管理连上 Linux 的账号问题了,这个账号的问题可大可小,大到可以限制他使用 Linux 主机的各项资 ...

  10. [Ynoi2016]这是我自己的发明(莫队)

    话说这道题数据是不是都是链啊,我不手动扩栈就全 \(RE\)... 不过 \(A\) 了这题还是很爽的,通过昨晚到今天早上的奋斗,终于肝出了这题 其实楼上说的也差不多了,就是把区间拆掉然后莫队瞎搞 弱 ...