tnblog
首页
视频
资源
登录

安装 Windbg 简单运用

11124人阅读 2022/8/24 16:35 总访问:3470311 评论:1 收藏:0 手机
分类: windbg

安装 Windbg 简单运用

软件安装列表


1.Visual Studio 2022: 安装 .NET Framework 4.8, .NET 6.0.5 ,支持 C++ 模板
2.Visual Studio Code:方便查看 CoreCLR 源码
3.Windbg Preview:从 微软商店 下载即可
4.CLR源码:可从 github :https://github.com/dotnet/runtime/releases/tag/v6.0.5 处下载(请根据自己的dotnet版本下载对应的源码)
5.推荐书籍:.NET高级调试(mario),汇编语言(王爽)

下载Windbg


访问Windows调试进行下载Windbg工具。
安装好后打开我们的Windbg。


接下来配置我们的符号以及调试.net的源码目录。
通过如下点击的路径来找到我们的

File
Setting
Debugging_settings


首先在我们的默认源路径上设置我们的源码路径。(D:\Download\runtime-6.0.3\src\coreclr
然后设置符号路径。(SRV*d:\mysymbols_fix*http://msdl.microsoft.com/download/symbols
最后加载我们的sos.dll(D:\Download\sos\sos64\sos.dll)

关于sos.dll,它在可以通过dotnet-sos工具来安装(请参考),也可以从我下面的云盘直接下载密码:qyvh。
注意我这里载入的64的,如果程序是86的请直接加载86的也是没问题的。
关于通过命令获取sos。

  1. # 安装dotnet sos
  2. dotnet tool install --global dotnet-sos


更多平台的安装大家可以参考黄老师的这篇文章:https://www.cnblogs.com/huangxincheng/p/12853849.html

简单测试


我们创建一个简单的项目,代码如下。

  1. using System.Diagnostics;
  2. namespace Example_0_2
  3. {
  4. internal class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8. // 创建一个断点
  9. Debugger.Break();
  10. // 触发GC回收
  11. GC.Collect();
  12. // 输出Hello, World!
  13. Console.WriteLine("Hello, World!");
  14. }
  15. }
  16. }


然后我们在生成该项目之后,使用Windbg运行,并且通过sxe ld coreclr命令在coreclr加载进来后拦截。
然后执行g命令继续运行。


我们可以通过.chain命令来查看加载的插件有哪些。


如果我们不希望加载某个组件可以通过.unload xxx来去掉,以及通过.load xxx来进行加载。

  1. .unload D:\Download\sos\sos64\sos.dll
  2. .chain
  3. .load D:\Download\sos\sos64\sos.dll
  4. .chain


我们还可以通过输入.cls命令来清理我们的命令窗口。


我们可以通过!sos.help来查看sos插件的帮助命令。(其他插件大多数一样的!<插件名>.help)


接下来我们可以通过!bpmd命令来为托管程序下断点。举个栗子。

  1. # 命令格式
  2. # !bpmd <程序dll名> <名称空间>.<类名>.<方法名>
  3. # 命令为
  4. !bpmd Example_0_2 Example_0_2.Program.Main
  5. # 继续执行
  6. g


我们可以看到它在方法入口处断住了,并且在我们右下的Breakpoint窗口中也有明确的断点信息。


然后我们可以通过!clrstack命令查看托管代码的调用栈。
随后通过点击IP地址,可以查看到它所对应的汇编代码。等同于命令!U /d 00007ffa3b282bf0,不加/d也可以。


-a参数是将它的参数信息打出来。

  1. !clrstack -a


在我们代码中有关于GC清理触发,我们可以通过如下bp命令来断点GC触发的情况。

  1. bp coreclr!WKS::GCHeap::GarbageCollectGeneration
  2. g
  3. g


我们发现断在了GC回收那一行,并显示出了对应的源码。
记不住命令可以通过x命令去搜索。

  1. x coreclr!*Garbage*


我们再通过!clrstack查看我们的栈执行到哪儿了,并且通过k命令查看线程栈的方式来看是通过Program.Main下面调用System.GC.Collect方法触发了当前断点的WKS::GCHeap::GarbageCollectGeneration


同样的我们可以通过gen变量发现是第二代gc(Locals窗口,以及代码中断点停留的方法里面),并且是通过诱导的方式触发的(reason_induced(1)),不是自愿的。
我们同时也可以通过dv /v命令来查看。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

剑轩

2022/8/25 9:14:04

这个很强,很秀的感觉

微信密码框提示下载并安装安全控件

登录微信商户平台 输入密码时 一直提示 微信密码框提示下载并安装安全控件 点击下载重复下载了很多次 依然没有用解决办...

.NET Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

Python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

重新安装IIS

Win+R--&gt;cmd--&gt;输入命令:cd\--&gt;回车(回到C盘根目录)--&gt; 输入:cd C:\Windows\Microsoft.NET\Framework\v4.0.3...

超详细VMware安装及破解

https://blog.csdn.net/newbie_907486852/article/details/79824042

Redis基础安装操作-windows版

一、下载 redis官方没有提供windows版本,需要从微软的git下载releases版二、安装,启动1.解压出来 启动服务 可能会双击会...

Nuget 安装指定版本package

Install-PackageBenchMarkdotnet-version0.9.7 Install-PackageNewtonsoft.Json-version12.0.3

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

​Windows下安装RabbitMQ

跳过舞,祝大家新年快乐哇!1、下载安装erlang因为rabbitmq是基于erlang实现的所以需要先安装erlang打开网址https://www.er...

MySQL概述与安装配置

1996年首次发行,对于初学者来说,MySQL很容易上手MySQL数据库MySQL 是开源的,所以你不需要支付额外的费用。MySQL 支持大...

vue.js 学习日记第一章-安装vue开发环境

官网:https://cn.vuejs.org/v2/guide/ 这是一篇学习性文章,不定时更新,用来记录我学习vue.js的过程。 首先,是v...

系统重装(一):安装制作Windows原装系统U盘

Windows是美国微软公司研发的跨平台及设备应用的操作系统.xinXP已经停止更新,微软也将在2020年1月14日正式结束对Windows 7...

VMware15 安装黑苹果虚拟机

最近正好要用到ios的打包就百度了一下亲测此方法有效原文链接:https://www.52pojie.cn/thread-804000-1-1.html必要文件下...

win10安装过程记录一下

这里可以不输入秘钥,选择我没有产品秘钥然后选择版本一般选择专业版本安装类型有两个选择只装系统选第一个想全部格式化重...

系统重装(二):安装Windows系统

嗨,大家好!上一篇我们介绍了如何制作windows系统U盘,这一篇就来介绍一下如何安装。上一篇链接请点击:http://www.tnblog...

vs code 插件安装推荐

1.Trailing Spaces该插件会将我们的开发的文档中多余的空格显示为红色,有时候苦于项目的需求,我们不希望开发的文件中有多...
这一世以无限游戏为使命!
排名
2
文章
635
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术