首页 > 其他分享 >WinDbg基本环境搭建及安装

WinDbg基本环境搭建及安装

时间:2023-08-27 11:44:06浏览次数:71  
标签:WinDbg SOS dll sos loadby 加载 安装 调试 搭建

目录


安装

有2个方式可以安装WinDbg。

  1. 新版 安装WinDbg Preview
    在商店里搜WinDbg直接就可以安装,这里安装的版本是x64版本。x64版本的WinDbg其实是可以调试x86版本的程序,直接附加到进程就可以了,这也是我们推荐的方式。
  2. 旧版 安装windows sdk

这里建议新旧两个版本都安装,实际调试时候都可能需要用到。

配置与调试

符号文件配置

sympath: WinDbg 查找 symbols的地址.

symbols 能优化我们的调试体验,我们可以通过如下命令查看 sympath :

.sympath

一般通过两种种方式设置sympath。参考Symbol path for Windows debuggers.

  • 系统环境变量

    增加系统环境变量:_NT_SYMBOL_PATH 对应的值为:
    SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

  • 调试会话中设置

    可以再调试种如下加载symbols :

.sympath C:\symbols\local;srv*C:\symbols\microsoft*https://msdl.microsoft.com/download/symbols
.reload

加载SOS.dll

SOS是在ntsd或windbag下调试.Net程序的扩展。有两种方式可以加载。
- .loadby
一般使用.loadby sos clr (针对.net framework 4.x)没有报错就代表正确加载了。实际上根据情况有如下几种选择:

    .loadby sos mscorsvr
    .loadby sos mscorwks
    .loadby sos clr
    .loadby sos coreclr
    .loadby sos <somethingelse>

如何选择参考链接: .net - Cannot .loadby sos mscorwks or .loadby sos clr - Stack Overflow

 - `.load`

对第一种方式的不能正确加载的情况,可以自行加载,使用方式如下:

.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll

接下来就能愉快的使用!eeheap等命令调试了。

注意:不要在.net clr还没有加载的时候就尝试加载sos 键入g直到clr加载后再中断重新加载sos.dll。

特殊情况的处理

如果只调试自己电脑上的程序那么一般情况比较简单,但调试客户的程序会遇到各种各样的情况。例如如下两种最常见的场景。

1. 32位兼容程序的调试

有时我们在生成项目时,选择了优先32位。生成32的程序在我们现在的64位环境下,会运行在wow64下。
这个时候我们是可以直接使用x64版本的windbg直接附加到进程调试的,但是对客户的机器上的程序,我们很多时候都需要生成dump来分析当时的问题。直接用默认的64位任务管理器生成的dump并不能直接分析,给bug的分析带来很多困难。我们可能会看到如下提示信息。

  0:000> !eeheap
  SOS does not support the current target architecture.

或者,

Failed to load data access DLL, 0x80004005 
Verify that 1) you have a recent build of the debugger (6.2.14 or newer) 
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory 
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path. 
            4) you are debugging on the same architecture as the dump file. 
                For example, an IA64 dump file must be debugged on an IA64 
                machine.

You can also run the debugger command .cordll to control the debugger's 
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload. 
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable 
path is pointing to mscorwks.dll as well.

按照提示输入.cordll -ve -u -l后有如下提示。

  .cordll -ve -u -l 
  CLR DLL status: No load attempts

使用windbg preview时可以在堆栈中看到wow64等字样就是遇到了这种问题。

我们可以通过如下方式解决:

    1. 使用32位的任务管理器重新抓dump。
      32位任务管理器位于 C:\Windows\SysWOW64\Taskmgr.exe下。参考链接:.Net Dump 的分析 I | 非洲海星的深海大鳳梨 (wordpress.com)
    1. 使用soswow64加载sos
      这里一定要使用旧版的windbg x86版本并下载soswow64放到指定目录下。
      使用 .load soswow64 加载后就能使用sos中的扩展命令。github中的readme说的非常清楚。

参考链接:poizan42/soswow64: windbg/dbgeng extension for debugging 64-bit dumps of 32-bit .NET processes. (github.com)

2. clr运行环境不符的调试

有时调试的目标dump的clr版本与本地并不相符,使用 .cordll -ve -u -l 命令有如下类似提示。
unable to find mscordacwks_x86_x86_4.7.3110.00.dll by mscorwks search
可以按提示拷贝目标机器上的相应dll,重命名后放到windbg的目录下。
参考:
Windbg调试SOS.DLL和CLR 不匹配问题_SpringDou的博客-CSDN博客

3. 调试其他机器上的内存转储文件

参考原文地址

需要目标计算机上的如下DLLs:

  • mscordacwks.dll
  • SOS.dll

他们位于当前的.NET framework中: C:\Windows\Microsoft.NET. Debugging Managed Code Using the Windows Debugger .

你需要把他们加载到WinDbg:

  • SOS: .load C:\path-to-dll\SOS.dll
  • mscordacwks: .cordll -lp C:\directory-in-which-mscordacwks-is-located
    • 路径不要带上mscordacwks.dll (例如,如果路径是 C:\dlls\mscordacwks.dll ,则使用如下命令 .cordll -lp C:\dlls)

4. 其他常见问题

参考nuggets/README.md at main · gabrielweyer/nuggets (github.com)

Q&A

其他参考链接

  1. dotnet core下的配置。教你配置windows上的windbg,linux上的lldb,打入clr内部这一篇就够了 - 掘金 (juejin.cn)
  2. windbg - Failed to load data access DLL, 0x80004005 - Stack Overflow
  3. "Failed to load data access DLL, 0x80004005" when debugging a live process on local machine (microsoft.com)
  4. How to use Windbg to debug a dump of a 32bit .NET app running on a x64 machine - PKI Extensions (sysadmins.lv)
  5. visual studio 2010 - Debugging dump of 32-bit process captured on 64-bit machine - Stack Overflow
  6. 调试运行在Wow64子系统下的程序----x64版windbg调试win32程序_lixiangminghate的专栏-CSDN博客

文章摘自

WinDbg调试托管程序环境问题总结

标签:WinDbg,SOS,dll,sos,loadby,加载,安装,调试,搭建
From: https://www.cnblogs.com/lanwah/p/17660054.html

相关文章

  • 如何安装和使用 Latte Dock
    你知道什么是“停靠区Dock”吧,它通常是你的应用程序“停靠”的底栏,以便快速访问。许多发行版和桌面环境都提供了某种停靠实现。如果你的发行版没有“停靠区Dock”,或者你想尝试一些新的停靠应用,LatteDock是一个不错的选择。它类似于macOS上的停靠区,每次你用鼠标悬停在任何停......
  • WEB项目概述和环境搭建
    第1章项目概述和环境搭建前言为了巩固web基础知识,提高综合运用能力。故在此章节我们将做了一个在线教育系统,要求每一位同学都能独立完成此案例1.项目概况1.1项目概述软件开发流程项目开发角色​参考PPT1.2项目需求优学管理系统是一款专门针对培训机构定制开发的......
  • 批量安装Linux系统之Cobbler构建
    一、cobbler简介cobbler是一款自动化操作系统安装的实现,与PXE安装系统的区别是可以同时部署多个版本的系统,而PXE只能选择一种系统。二、安装cobbler安装yum源yuminstallepel-release-yyuminstalldhcptftp-serverxinetdhttpdcobblercobbler-webpykickstartdebmirror-y......
  • ASP.NET-MVC项目搭建
    目录零、资料一、零、资料ASP.NETMVC:https://www.bilibili.com/video/BV1q64y1z7zS/一、......
  • windows10下SQL Prompt安装图文教程
    一、下载安装官网或者教程:www.red-gate.comvs可以去插件库       二、激活失效激活失效:方法1:在本地hosts加入以下代码:127.0.0.1licensing.red-gate.com127.0.0.1www.red-gate.com127.0.0.1red-gate.com127.0.0.1productusage.red-gate.com127.0.......
  • 20天等待,申请终于通过,安装和体验IntelliJ IDEA新UI预览版
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos关于IDEA的预览版IDEA会启用新的UI,这事情之前已经在多位大佬的博客中有提到了,当时我也按照大佬们的文章去递交了试用体验版的申请今天终于收到邮件,说审批通过,并给出......
  • promethus二进制文件安装脚本
    #!/bin/bashuseradd-M-r-s/bin/falseprometheusmkdir/etc/prometheus/var/lib/prometheustarxfprometheus-*.tar.gz&&cdprometheus-*cp./{prometheus,promtool}/usr/local/bin/cp-r./{consoles,console_libraries}/etc/prometheus/cp./promet......
  • HyperLedger Fabric基础:搭建Fabric测试网络(三)
    在本系列第二篇中,我们介绍了如何创建通道与在通道上启动链码的问题。本篇将探索如何使用Peer客户端与区域链网络通信。启动测试网络后,可以使用Peer节点CLI与网络进行交互。Peer节点CLI允许您从CLI调用已部署的智能合约、更新通道或安装和部署新的智能合约。确定当前我们仍处于test-......
  • vue--day70---搭建vuex 环境
    [email protected](Vuex)3.store4.vc==>store5.vue2中只能使用vuex的3版本  vue3中只能使用vuex的4版本6.store/index.js//改文件用于创建vuex最为核心的storeimportVuefrom'vue'//引入vueximportVuexfrom'vuex'Vue.use(Vuex)......
  • 安装opencv_contrib-3.4.9, fatal error: opencv2/xfeatures2d.hpp: 没有那个文件或目
    1.在Opencv的CmakeLists.txt中加入以下include语句:INCLUDE_DIRECTORIES("/home/yourusername/Dependencies/opencv-3.4.9/opencv_contrib-3.4.9/modules/xfeatures2d/include")2.ippicv_2019_lnx_intel64_general_20180723.tgz下载地址:链接:https://pan.baidu.com/s/1mu......