【发布时间】:2011-11-22 08:11:20
【问题描述】:
我参与了各种 C++ 项目(主要使用 MSVC6 到 MSVC10),其中我们最近发现了一些句柄泄漏(CreateThread 函数给出的线程句柄)。我怀疑还有很多其他手柄被泄露,我想在我们的夜间测试结果中集成一个测试,以验证没有手柄泄露。
我的想法是开发一个 DLL,用于检测相关的 kernel32.dll 函数(CreateThread、OpenProcess、CreateProcess 等等)以及CloseHandle 函数。然后,DLL 将为每个获取的句柄记住一个回溯。在进程结束时,DLL 将打印所有未关闭到某种日志文件的句柄的回溯,然后可以由测试框架解析。
这当然也会为所有仍可访问的句柄产生回溯(所以从技术上讲,它们没有泄漏 - 也许作者打算在进程终止时让操作系统回收它们)但我想明确地关闭它们不会伤害 - 特别是因为我们已经有一些很好的 RAII 包装器用于这些东西,我们只是没有尽可能多地使用它。
现在我想知道 - 这似乎是一种相当简单的方法;也许这里有人知道已经这样做的图书馆?
【问题讨论】:
标签: c++ winapi memory-leaks