GDI泄漏调试工具——GdiChecker

前几个月一直在做GDI泄漏相关的工作。

相比于内存泄漏,有很多成熟的工具去检测。但是在我定位gdi泄漏之初,没有什么好用工具。基本办法的是通过任务管理器看某个进程gdi数量的变化,高级一点的是用GDIView这个程序去查看进程各种gdi类型的数量变化,可以进一步定位出是哪种gdi在泄漏,缩小范围。另一个有用的工具是GDIndicator,它可以注入到目标进程,查看gdi句柄对应对象的详细情况。比如显示出bitmap,icon,dc里面内容的样子。

显示某个gdi对象的详细信息这个功能非常有用,很多时候你就可以根据gdi对象的详情就知道是哪种资源在泄漏,哪个图片,哪种dc或者是哪种字体。还有种情况,假如第三方dll造成你程序gdi的泄漏,即使你知道某种类型的gdi正在泄漏,但是你review你自己的代码却发现对应gdi资源管理没有问题。如果你知道gdi的对象的详情,比如某个位图的样子,你就发现这可能是输入法注入进来造成的gdi泄漏。

但是GDIView和GDIndicator都有各自的缺点。GDIView分32位和64位两个独立的exe,并且不能查看到某个gdi对象的详情。而GDIndicator仅支持xp,win7下面无法使用。

我写了一个GdiChecker的程序,综合了GDIView和GDIndicator的优点。它可以同时支持显示32位和64位进程gdi的各种类型GDI数量,又可以注入到进程里面显示gdi的详情。

目前我已经把这个工具用wtl重写了一边,在github上开源了:https://github.com/plxaye/GdiChecker
也可以点这里下载GdiChecker:GdiChecker.exe 1.1.9.13
希望能帮助到各位,如果有什么反馈,请告诉我。

下面是软件的截图:
20140901153038

点击refresh菜单就可以刷新当前系统进程的GDI数量情况。

如果你想要查看某个进程GDI的详细情况,则选中进程,点击details菜单,就可以看到详细情况,如图:

20140901153403

发表评论

电子邮件地址不会被公开。 必填项已用*标注