如何将dotnetframework3.5的dmp文件在windbg中有效分析?

摘要:一个dotnetframe3.5的windows服务出现死锁,dmp下来后无法自动加载sos.dll,经过以下几个过程,问题解决。过程大致如下。 windbg第一次打开得到的dmp文件,有类似提示 ADDITIONAL_DEBUG_TEXT
一个dotnetframe3.5的windows服务出现死锁,dmp下来后无法自动加载sos.dll,经过以下几个过程,问题解决。过程大致如下。 windbg第一次打开得到的dmp文件,有类似提示 ADDITIONAL_DEBUG_TEXT: SOS.DLL is not loaded for managed code. Analysis might be incomplete 执行 .cordll -ve -u -l 提示 0:000> .cordll -ve -u -l CLR DLL status: No load attempts 原因是32位的程序跑在64位操作系统时,没有使用32位的任务管理器来“创建内存转储文件”。 在命令行录入以下命令打开32位任务管理器 C:\Windows\SysWOW64\Taskmgr.exe 有了32位的dmp后,用最新的windbg打开,依然没有自动加载sos。那就看看需要哪个sos.dll了 首先开日志,看看要什么文件。执行以下命令序列: !sym noisy .cordll -ve -u -l 你会看到类似信息 0:000> .cordll -ve -u -l CLRDLL: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.9179 f:0 doesn't match desired version 2.0.50727.8980 f:0 SYMSRV2: [mscordacwks_x86_x86_2.0.50727.8980.dll] Uri C:\ProgramData\Dbg\sym\mscordacwks_x86_x86_2.0.50727.8980.dll\669159A3621000\file.ptr SYMSRV2: [mscordacwks_x86_x86_2.0.50727.8980.dll] Uri C:\ProgramData\Dbg\sym\mscordacwks_x86_x86_2.0.50727.8980.dll\669159A3621000\file.ptr SYMSRV2: [index2.txt] GET from host msdl.microsoft.com SYMSRV2: [index2.txt] Downloaded 0 percentSYMSRV2: Header reply: http/1.1 404 not found 拿上面的信息去问元宝,提示以下内容 方法一:获取匹配的 DLL(推荐) 这是最直接可靠的方法。 获取正确的 DLL:从产生此 dump 文件的原始计算机上,复制 C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll文件。 重命名文件:将复制过来的 mscordacwks.dll重命名为错误信息中明确要求的文件名:mscordacwks_x86_x86_2.0.50727.8980.dll。 放置文件:将重命名后的文件放入您的符号路径(例如 `c:\symbols`下的相应目录)或 WinDbg 的安装目录 如果完全按元宝提示去做,你可能会在拷贝文件到c:\symbols时提示文件已存在,无法拷贝。这是因为c:\symbols可能有一个跟dll一样名字的目录。删除这个目录,拷贝文件进去,还是不行。
阅读全文