Visual Studio是开发时常用的利器,但是有些情况还是需要用到windbg作为调试工具,
1. windbg安装方便,直接拷贝也可以使用
2. windbg更为轻量级,内存占用更少
3. windbg可以方便的在没有源代码时支持调试
4. windbg可以支持调试脚本
5. windbg可以方便的进行内存检查
6. windbg可以查看crash dump
在工作的时候可以用windbg来解决以下几个方面的问题。
调试crash dump
调试winform程序user object泄露
调试没有源代码支持的客户机上的程序
进行托管程序的调试,需要用loadby命令先加载sos.dll这个调试扩展。有的时候调试的dump所加载的mscorwks版本跟调试机上的版本不一致,最简单的方法就是截取dump文件的机器上得到相应的mscorwks.dll拷贝到windbg的安装目录下,按照版本命名如mscordacwks_x86_x86_2.0.50727.3607.dll。
.loadby sos mscorwks
调试user object泄漏
产生原因
Winform程序中经常会由于资源没有正确的释放导致产生user object的泄漏,最终导致系统抛出"Error creating window handle"的异常。打开任务管理器在选项中选中user object,可以看到user object的在winform程序中已经明显超过其他应用程序。在默认设置下每个进程可以允许10000个user object,超出了这个限制异常就会发生。
解决user object泄漏的问题一般要关注下面几个方面,
1. 页面级别的泄漏(form level)
2. 控件级别的泄漏(control level)
3. 其他非托管资源的泄漏(other class implemented IDisposible)
调试方法
1. windbg attach到应用程序
2. 加载sos调试扩展(.loadby sos mscorwks)
3. 查看堆中内存使用情况(!dumpheap -stat)
0:006> .loadby sos mscorwks
0:006> !dumpheap -stat
PDB symbol for mscorwks.dll not loaded
total 3814 objects
Statistics:
MT Count TotalSize Class Name
......
7932a2d4 80 1280 System.WeakReference
7b2260cc 46 1288 System.Windows.Forms.MouseEventArgs
7932b3a4 58 1392 System.Collections.Stack
79333178 26 1456 System.Collections.Hashtable
79329d90 48 1536 System.EventHandler
79331ca4 82 1640 System.RuntimeType
79331754 17 1700 System.Char[]
7b221628 34 1768 System.Windows.Forms.CreateParams
79330740 148 1776 System.Object
7b21e9d0 11 1848 System.Windows.Forms.TextBox
7b21a9c4 11 1848 System.Windows.Forms.Button
7b220ef0 34 1904 System.Win
Windbg调试windows handle泄漏
最新推荐文章于 2023-09-20 15:01:12 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)