Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备。准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试。

今天我们来一篇入门的文章。首先,Windbg是什么?

Windows Debugger,简称WinDbg,.NET 最强分析调试利器。它可以用来:

  • 调试内核模式和用户模式代码
  • 分析Crash dump
  • 分析代码执行时 CPU 寄存器信息

我们可以通过WinDbg调试以下具体问题:

  • 线程阻塞
  • 内存泄露
  • 分析查询运行时线程堆栈和变量
  • 分析进程Crash原因
  • 分析消耗CPU原因
  • 查看并调试CLR异常

那么,首先我们先进行Windbg下载安装、配置。

一、下载安装WinDbg,配置调试环境

1. 推荐下载链接

https://raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi

或者从Windows Store下载 WingDbg Preview版本

下载后一步一步安装即可

 2. 配置调试符号

大家会问一个问题:为什么要配置调试符号?

若要使用 WinDbg 提供的所有高级功能,必须加载适当的符号:比如说我们可以调试、查看.NET CLR程序堆栈,此时要加载对应的调试符号。

微软提供了统一的调试服务服务器地址:

http://msdl.microsoft.com/download/symbols,将这个地址提供的调试符号,下载缓存到本地,Windbg调试的时候可以用上。
srv*c:\symcache*http://msdl.microsoft.com/download/symbols;c:\symcache

  

3. 下载并使用WinDbg调试器扩展

Windbg调试器扩展是Windbg调试的精华和核心,可以这么说,掌握各类Windbg调试器扩展,你就掌握了各类调试技能。

默认情况下,WinDbg的调试指令是有限的,通过一些WinDbg调试器扩展,可以方便我们进行.NET 程序调试

 SOS调试扩展 : 随着.NET Framework安装,可以直接加载:  .load sos clr

SOS这个dll在哪里呢(分32位和64位)?

4.0, 32-bit –> C:\Windows\Microsoft.NET\Framework\v4.0.30319
 4.0, 64-bit –> C:\Windows\Microsoft.NET\Framework64\v4.0.30319

  MEX调试扩展:This extension is widely used by Microsoft Support Engineers in troubleshooting process applications

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=53304

下载完成后,将32/64位的Mex.dll 拷贝到windbg安装目录中

例如:C:\Program Files\Debugging Tools for Windows (x64)\Mex.dll

详细使用说明:https://github.com/REhints/WinDbg/tree/master/MEX

下载、安装、配置完成Windbg之后,接下来我们了解一下一些基本的调试命令。

二、基本的WinDbg调试指令

1. WinDbg自带的调试指令

更多指令,可以查看一下链接:

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg

 2. SOS调试扩展常用的调试指令

 

 3. Mex调试扩展常用的调试指令

   

     

    

    

    

    

     更多Mex调试指令,可以查看链接:https://github.com/REhints/WinDbg/tree/master/MEX

以上是整个Windbg调试入门篇的介绍,希望大家能够掌握,下一篇我们将通过一些具体的案例,示意各个指令的使用场景。

周国庆

2020/6/27

.NET高级调试系列-Windbg调试入门篇的更多相关文章

  1. 学习笔记之盘一盘 Python 系列 1 & 2 - 入门篇

    盘一盘 Python 系列 1 & 2 - 入门篇 https://mp.weixin.qq.com/s?__biz=MzIzMjY0MjE1MA==&mid=2247486473&a ...

  2. Azure Event Bus 技术研究系列1-Event Hub入门篇

    前两个系列研究了Azure IoT Hub和Azure Messaging.最近准备继续研究Azure Event Bus,即Azure的事件中心.首先, Azure Event Hub的官方介绍: ...

  3. Azure Event Hub 技术研究系列1-Event Hub入门篇

    前两个系列研究了Azure IoT Hub和Azure Messaging.最近准备继续研究Azure Event Hub,即Azure的事件中心.首先, Azure Event Hub的官方介绍: ...

  4. Visual Studio 调试系列9 调试器提示和技巧

    系列目录     [已更新最新开发文章,点击查看详细] 01 固定数据提示 如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看. 即使在重新启动后,固定的变量也能 ...

  5. Windbg程序调试系列5-高CPU问题分析

    上篇博客中给大家分享了使用Windbg进行Live Debugging: Windbg程序调试系列4-Live Debugging 本篇中我们继续,跟大家分享常见的应用程序高CPU使用率问题分析. 先 ...

  6. 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令

    调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...

  7. Visual Studio 调试 ---- 系列文章

    调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...

  8. Windbg程序调试系列-索引篇

    最近整理了一下Windbg程序调试系列的文章,做个了索引贴,方便大家查询.搜索: Windbg程序调试系列1-常用命令说明&示例 Windbg程序调试系列1-Mex扩展使用总结 Windbg程 ...

  9. Windbg程序调试系列1-常用命令说明&示例

    Windbg程序调试是.Net高级开发需要掌握的必备技能,分析内存泄露.分析高CPU.分析线程阻塞.分析内存对象.分析线程堆栈.Live Dedugging.这个领域可以说一个技能+场景化应用的结合, ...

随机推荐

  1. 被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL

    上次帮小王入了 Spring Boot 的门后,他觉得我这个人和蔼可亲.平易近人,于是隔天小王又微信我说:"二哥,快教教我,怎么在 Spring Boot 项目中使用 JDBC 连接 MyS ...

  2. cpprestsdk同时使用boost.asio,acceptor就一直报Invalid argument。

    本文目录,首先总结问题,然后案例还原. 总结: 问题的根本在于boost.asio作为header-only库,运行程序与动态库之间容易因为版本错配而产生运行期莫名其妙的问题. cpprestsdk使 ...

  3. CentOS8的网络管理变化

    资料来源: https://www.cnblogs.com/linuxandy/p/10839856.html 1.CentOS8使用NetworkManager.service(简称NM)来管理网络 ...

  4. 数据库之 MySQL --- 数据处理 之 表操作、CRUD(六)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. 表操作 创建数据库CREATE DATABASE demo-- 删除数据库DROP DATABAS ...

  5. LeetCode 74,直击BAT经典面试题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题43篇文章,我们今天来看一下LeetCode当中的74题,搜索二维矩阵,search 2D Matrix. 这题的 ...

  6. Java实现 LeetCode 810 黑板异或游戏 (分析)

    810. 黑板异或游戏 一个黑板上写着一个非负整数数组 nums[i] .小红和小明轮流从黑板上擦掉一个数字,小红先手.如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家 ...

  7. Java实现 LeetCode 794 有效的井字游戏 (暴力分析)

    794. 有效的井字游戏 用字符串数组作为井字游戏的游戏板 board.当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true. 该游戏板是一个 3 x 3 数组,由字 ...

  8. Java实现 LeetCode 137 只出现一次的数字 II(二)

    137. 只出现一次的数字 II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空 ...

  9. App自动化测试框架学习探索--从零开始设计

    App自动化测试框架学习探索--从零开始设计---持续更新中,敬请关注 1 批量执行app自动化测试使用多线程设计思路: 1)并发级别选择用methods 2)采用@Test多线程,数据提供类dp单线 ...

  10. c/c++混编

    /* head.h */#ifndef __SUM_H__ #define __SUM_H__ #ifdef __cplusplus extern "C" { #endif int ...