定制调试诊断工具和实用程序(6)
2006-07-20 11:42:24 来源:WEB开发网核心提示: 防止泄漏文档中关于 Win32 调试 API 的另一方面的描述是必须释放不同的 XXX_DEBUG_EVENT 结构返回的句柄,Matt Pietrek 在其 November 1995 MSJ“Under the Hood”专栏文章中指出:在 XXX_DEBUG_
防止泄漏
文档中关于 Win32 调试 API 的另一方面的描述是必须释放不同的 XXX_DEBUG_EVENT 结构返回的句柄。Matt Pietrek 在其 November 1995 MSJ“Under the Hood”专栏文章中指出:在 XXX_DEBUG_EVENT 结构中返回到调试器的句柄应该被关闭。事实上,几乎每个句柄都必须用 CloseHandle 关闭。只有一个例外,就是存储在 CREATE_THREAD_DEBUG_EVENT 中的线程句柄,它应该在进程终止时由系统来关闭。其它的句柄如果不关闭,便会造成增长速度非常快的系统资源泄漏,有关的句柄如 Figure 7 所示。这类垃圾的收集由 CApplicationDebugger::HandleDebugEvent 自动处理。
不论你使用哪种清除方法,每次你调试某个进程时,系统不可避免地要泄漏两个句柄:信号机(semaphore )和端口(port),两者都没有命名。为了让你确信 CApplicationDebugger 不负责处理这种泄漏,请允许我指出:用 sysinternals 的 ProcessExplorer 或 Windows Resource Kit 中的 DH.EXE 可以观察到 Visual Studio 6.0 和 Visual Studio .NET 中同样的泄漏行为。
现在你已经看到了如何用 Win32 调试 API 来获取某个进程执行期间在其地址空间中加载和卸载的 DLLs 确切列表。Windows 本身提供了另外一个途径来获取有关 DLLs 的其它详细信息。
参考资料
在后续文章中,我将介绍 Windows Loader,它知道一切。
(待续)
- ››调试SQL server 2008功能设置
- ››调试JavaScript错误
- ››定制个性化的对话框窗口类
- ››定制 SWT/RCP 界面:如何编写一个漂亮的 SWT/RCP ...
- ››调试和测试 Swing 代码
- ››定制基于 Visual studio 2005 平台 Windows CE(AR...
- ››定制版黑雨 blackra1n 越狱3.1.2 全系 iPhone
- ››调试集成 Java 和 C/C++ 的代码
- ››定制 Eclipse RCP 应用程序,第 1 部分: 可与 SWT...
- ››调试JavaScript脚本程序(Firefox篇)
- ››调试JavaScript/VB Script脚本程序(ASP.NET篇)
- ››调试JavaScript/VB Script脚本程序(Wscript篇)
更多精彩
赞助商链接