[Debugging Tool]Windbg调试托管代码
引言
Windbg一直都是Windows平台调试的利器,自己会这个时间也不长,写这个东西也是当总结和学习性的东西。不废话,开工
安装
下载地址: http://www.microsoft.com/whdc/devtools/debugging/default.mspx
一般来说,我们的机器应该是32bit的机器,安装就好.
打开WinDbg就有熟悉的界面了
虽然不太好看,实用啊
加载扩展SOS(Son of Strike)
SOS是.Net Framework中对于WinDbg的调试扩展
默认位于: C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll
好了,随便写个测试程序
1: using System;
2: using System.Collections.Generic;
3:
4: public class MyClass
5: {
6: public static void Main()
7: {
8: Browser b = new Browser();
9: b.Visit();
10:
11: Console.Read();
12: }
13: }
14:
15: public class Browser
16: {
17: private static string HomePage = "http://www.xwang.org";
18:
19: public Browser(){}
20:
21: public Browser(string homepage) : this()
22: {
23: HomePage = homepage;
24: }
25:
26: public void Visit()
27: {
28: Console.WriteLine(HomePage);
29: }
30: }
编译运行, 运行这个程序
而后打开WinDbg
选择我们的程序进程MyClass.exe
好了,现在出来WINDBG界面了, 现在要加载SOS.dll
.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll
我自己比较喜欢把这个sos.dll拷贝到Windbg目录下,这样,我每次只用: .load sos.dll 就好
为了调试.Net程序 还需要加载个mscorwks, 不然有时会报个错. pdb Symbols not found
.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
好了,现在开始我们的Debug 过程了
命令参考
http://msdn.microsoft.com/zh-cn/library/bb190764(vs.80).aspx
挑点常用的
!Name2EE
格式: Name2EE <module name> <type or method name>- 或 -Name2EE <module name>!<type or method name>
我们的程序为 MyClass 而入口点为MyClass.Main
那么命令则为: !Name2EE MyClass.exe!MyClass.Main
!DumpDomain <domain address>
默认显示出.Net下加载的三个程序集 System Domain, Shared Domain, Application Default Domain
进去看我们的Application Default Domain: Domain 1
!DumpDomain 003a4648
显示这个地址下的Domain信息
!DumpHeap [-stat] [-min <size>][-max <size>] [-thinlock] [-mt <MethodTable address>] [-type <partial type name>][start [end]]
!DumpHeap -type Browser
!DumpObj 或 !do
!DumpArray
来个示例,找到Browser下的string
!Name2EE MyClass.exe!Browser.Visit
!DumpMD 00183080
!DumpClass 003512e0
!DumpObject 01e325f8
不记得了怎么办
!Help <命令名称>
例如: !Help DumpHeap
Have Fun :)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述