在Windows 10出来之前,WinDbg分为32位和64位,界面也比较古老,且随着Windows SDK一起安装,根据不同的程序,选择32位或64位来运行,而且还有一些环境需要配置,环境搭建可能也比较麻烦,很容易从入门到放弃。

▲ 上古时期的UI界面,最大的问题是对高分辨率的支持不够好,默认的字体偏小费眼睛 (当然,字体大小可以调整设置)

Windows 10出来之后,微软更新了WinDbg的UI,并命名为WinDbg Preview,不再区分32位和64位,界面也变得更现代化了,但是只能在Windows Store里面安装。这一Preview就是好多年,在今年的4月份,微软终于更新了WinDbg并把名字里的这个Preview给拿掉了。新版本同样需要在Windows Store里面安装,在Windows Store里的名字还叫WinDbg Preview,只支持在Windows 10(1607)及以上操作系统。

▲新版WinDbg,相当洋气

新旧版本WinDbg的核心命令和功能都是一样的,只是UI界面不一样,字体大小也不一样,所以如果使用的Windows 10及以上的系统,安装新版的WinDbg体验上会更好。

虚假的安装方法


WinDbg默认是需要在Windows Store应用商店里才能安装,我的台式机上的Windows 10操作系统使用的是本地账户,没有注册微软账号,所以Windows Store应用商店根本打不开。但还好,WinDbg官网也提供了除了应用商店安装之外的的下载安装方式,可以到官网先下载一个在线安装包“windbg.appinstaller”,这个安装包很小,只有1Kb。

在Windows 10及以上系统上,直接点击这个小文件就可以安装,但搞不好还会出现下面的错误,即使侥幸能够解析,安装的过程也会非常的缓慢,它其实只是一个在线安装包,首先需要下载真正的安装文件,下载完成后才能安装,如果在下载过程中出错,就要从头来过。

下载过程中的进度条非常玄学,安装过程体验也非常不好。

真正的安装方法


上面下载的这个名为“windbg.appinstall”的1Kb在线安装包,它其实是一个描述文件,用记事本可以直接打开。打开后发现就是一个xml文件。

它实际上是需要先从里面的Url地址 “https://windbg.download.prss.microsoft.com/dbazure/prod/1-2303-30001-0/windbg.msixbundle” 去下载真正的安装文件,这个地址一看里面有“dbazure”就不是好惹的,你要不会科学上网,下载会非常慢。

我这里设置好科学上网后,把上面的地址直接复制到浏览器的工具栏里,就可以直接下载了,速度飞快。

这个名为“windbg.msixbundle”的文件,足足有600多MB,利用虚假的安装方法安装,那是很要命的。下载完成之后,直接点击安装就可以了,下面是我安装完成之后再次点击安装的界面,非常好。

简单配置


当然安装完新版的WinDbg是可以直接使用了,但是为了使用的更愉快,需要配置一下符号表及其位置,最简单的方法是在操作系统里的系统变量里新增一个“_NT_SYMBOL_PATH”的环境变量,值为:

SRV*E:\mysymbols*http://msdl.microsoft.com/download/symbols

表示把符号表放在E盘的mysymbols目录下,并且符号表从指定的网址下载。

其它更多的内容可以参考这篇文章

初体验


我其实在家里的笔记本上很早就体验过了,这里为了写这篇文章假装初体验一下,比如我最近开发的一个小程序在开发过程中发现运行时间长了界面卡死,但CPU和内存占用不是很高,那么原因在哪里呢?直接把进程dump出来,在Windbg里打开,切换到0号UI线程,然后输入k看下当前的线程堆栈在干啥。

很清晰明了,UI线程正在忙着往一个ListBox里面插入对象,调用方法“FormLog.LogMsg”都直接给打印出来了😂。原因是在开发调试阶段需要记录大量日志,过程中为了方便直接使用日志来记录了,但程序为了方便查看日志,会注册日志写入回调,当有日志产生时,会在UI界面上的ListBox里插入一项,大量的日志记录会使得日志查看Form中的ListBox产生大量的对象插入操作。找到原因之后很容易就很快速的解决问题。

当然使用旧版的WinDbg也可以,但奇怪的是,有些地方显示不出来,但仍然能看出一些问题的端倪。

 

 

参考

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/windbg-overview

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/ 

https://www.cnblogs.com/huangxincheng/p/12853849.html