winDBG排错小记

去年底,公司一个上线了近一年的系统逐渐出现访问缓慢,操作超时的问题。本人使用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版本不匹配问题解决

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

公司使用的技术框架比较老,大部份仍停留在原生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 扩展命令手册》

时间: 2024-10-12 22:57:05

winDBG排错小记的相关文章

Windbg(2)

摘抄于:http://www.cnblogs.com/awpatp/category/228209.html Debug相关的一些小技巧 摘要: 1. 如何Debug一个进程的子进程? 答: 使用WinDBG attach到父进程, 然后输入命令".childdbg 1"(无引号). 这样子进程在刚刚被加载的时候, WinDBG就Attach上去了. 这两个进程的debug session都在一个WinDBG的窗口里, 如果想要切换当前进程, 可以使用命令"|"来查

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

http://www.appinn.com/blue-screen-search-code/ 蓝屏代码查询器 – 找出蓝屏的元凶 11 文章标签: windows / 系统 / 蓝屏. 蓝屏代码查询器可以帮你查出引起蓝屏的故障原因并可以到微软知识库中查询解决方案,和之前的 BlueScreenView 配合是很好的蓝屏故障排除组合.@Appinn 使用时只需填入错误代码的简写即可,另外在支持中心中有关于蓝屏原因分析的文章链接,有兴趣的童鞋可以去看看..  官方网站 | 来自小众软件 http:/

Windbg程序调试--转载

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查看源代码.设置断点.查看变量, 查看调用堆栈及内存情况. ? 调试应用程序(用户模式 user mode) ? 调试操作系统及驱劢程序(内核模式 kernel mode) ? 调试非托管程序(native program) ? 调试托管程序(managed program) ? 实时调试 (JIT:

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

1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 3. 配置WinDbg: 运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量: 在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSym

Windows 10故障排错-为什么迅雷播放器在Windows 10中会长时间停止响应?

这两天在几家客户那里介绍微软的Windows Azure,有几个精彩的demo我还录制了视频.没成想迅雷播放器在我的Windows 10预览版上似乎得了水土不服之症,每次打开视频,最起码要卡10~15秒钟才正常开始播放,让我有一种很强的挫败感. 作为一名IT技术人员,自然不能无视这个故障,也不能简单地重装其他播放器.----深入其虎穴,捉得虎子,才是硬道理. Windows工程师手边最好的排错工具,当然是Sysinternals Suite.有性能问题,首先得找Process Monitor,所

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

原调试IDA排错troubleshootsymbolspdbsysinternalprocess monitor 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windbg)可以通过调试符号(PDB)把地址与符号名对应起来,为我们提供更可读的信息.IDA应该也支持加载PDB,通过查看IDA安装目录下的idahelp.chm(打开后搜索PDB即可找到相关说明)发现还真支持.但是当我加载符号的时候,却失败了.本文记录了整个调查过程. 效果对比 先放两张对比图,大家直观感

SpringBoot - 二零一七0421小记

一.SpringBoot使用起来比起SpringMVC更便捷,在注解上的小变化,我记录了下面几个: @Controller + @ResponseBody = SpringMVC中用@RestController来代替前面两个注解,通过这个注解,可以将所有的前端http请求放入SpringBoot的Controller容器中,并返回json格式的数据给前端 @RequestMapping(value={"/hello","/hi"},method=RequestMe

广州postgresql用户会技术交流会小记 2015-9-19

广州postgresql用户会技术交流会小记  2015-9-19 今天去了广州postgresql用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用postgresql -X2的情况 第二个讲师介绍了postgresql里面的一些执行计划分析 我个人比较关注第一个session,因为涉及到真正的应用案例 网上有对postgresql -X2的简短介绍,我先转载过来 转载:http://francs3.blog.163.com/blog/static/405767272

git 学习小记之记住https方式推送密码

昨天刚刚学了点git基础操作,但是不幸的是[email protected]给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在[email protected]官网找到了解决方法<https方式使用[email protected]设置密码的方式>文中给出了几个方法,并且都非常简单. 关于 cache 缓存方式,我不太喜欢,因为要设置时间,而且会过期.而 store 相应的非常方便,设置全局后,方便多个库使用.当然如果