WinDbg是什么?
WinDbg 是一个调试器(Debugger)。
备注:简单来说调试器是一种软件工具。它可以让程序员在执行程序时暂停程序运行,并检查程序的状态,包括变量值、内存状态和代码位置信息,以便找出问题所在并进行修复。
我所知的类似的带有调试器的功能还有后端开发工具比如Visual Studio、前端开发工具、还有我早先用来调试JavaScript的代码的浏览器控制台。
WinDbg能做什么?
或者说为什么非要用WinDbg来调试?
案例:
案例1:运行一段时间的应用程序的CPU或内存突然升高?
用开发工具调试的前提是我们大体上知道是在哪段代码出了问题,这样我通过性能测试得到样本进行分析。但是服务器的应用程序CPU或内存突然升高我们
无法复现问题,也无法定位是哪个模块出了问题。
案例2:比如多线程死锁的问题
我想知道哪个线程正在占用特殊的临界区。但Visual Studio调试器无法获取信息
案例3:内核调试,包括驱动,系统代码。比如解决系统蓝屏的问题
案例4:内存破坏或内存泄漏的问题。
WinDbg主要用于以下应用场景:
1. 调试应用程序和驱动程序:开发人员可以使用WinDbg来调试应用程序和驱动程序,定位和解决程序中的bug和错误。
2. 分析系统崩溃和错误:WinDbg可以帮助分析系统崩溃时生成的内存转储文件,以确定导致系统崩溃的原因。
3. 内存泄漏分析:开发人员可以使用WinDbg来分析应用程序的内存使用情况,帮助发现和解决内存泄漏问题。
4. 性能分析:WinDbg还可以用于性能分析,帮助开发人员优化应用程序的性能。
5. 逆向工程:安全研究人员和逆向工程师也可以使用WinDbg来分析恶意软件或者进行逆向工程工作。
了解WinDbg几个概念?
1、SOS是son of strike的缩写。是strike 的子集,可以理解成一个扩展的命令集。
2、符号就是PDB文件,我们会在DEBUG模式编译项目时,会对应的模块(exe或dll)一起生成出来。它的作用可以简单地理解对dll进行标注,使调试时通过pdb就能看到局部变量,全局变量,行号等等其他信息。
3、Dump文件是进程的内存镜像。它是一种二进制的文件,用于存储系统或应用程序的状态、堆栈、内存映像、日志等一系列信息。一般系统会在发生崩溃时自动创建转储文件,我们也可以通过工具手动捕捉Dump。
为了讲dump文件逆向到clr上的运行时状态,所以我们必须要找到当时的运行程序的clr版本,同时也要找到clr版本对应的sos.dll,他们通常是在一起的。
dump是运行在clr之上的记录的,我们是通过sos指令与clr进行交互,clr可以获知dump当时记录的状态和堆栈等信息,然后通过pdb符号能够解析出来具体的代码。
如果本文引用了你的文章而未注明,请及时联系我。