gpt4 book ai didi

c++ - 是否有可以链接到现有应用程序的 handle 检漏仪?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:48 26 4
gpt4 key购买 nike

我参与了各种 C++ 项目(主要使用 MSVC6 到 MSVC10),我们最近在这些项目中发现了一些句柄泄漏(由 CreateThread 函数给出的线程句柄)。我怀疑还有很多其他句柄也泄漏了,我想集成一个测试来验证没有句柄泄漏到我们的夜间测试结果中。

我的想法是开发一个 DLL,它检测相关的 kernel32.dll 函数(CreateThread、OpenProcess、CreateProcess 等等)以及 CloseHandle功能。然后,DLL 将为获取的每个句柄记住一个回溯。在该过程结束时,DLL 会将所有未关闭的句柄回溯打印到某种日志文件中,然后测试框架可以对其进行解析。

这当然也会为所有仍可访问的句柄产生回溯(所以从技术上讲,它们没有泄漏 - 也许作者打算在进程终止时操作系统回收它们)但我猜明确地关闭它们不会伤害 - 特别是因为我们已经有了一些不错的 RAII这些东西的包装器,我们只是没有像我们应该的那样使用它。

现在我想知道 - 这似乎是一种相当简单的方法;也许这里有人知道已经这样做的图书馆?

最佳答案

这绝对是可能的,但我认为目前还没有一个库可以做到这一点。

我认为最简单的方法是使用 Application Verifier。您可以从 Microsoft 的 Debugging Tools for Windows 获取它。 .配置它以跟踪您的应用程序的句柄,在调试器中运行您的应用程序一段时间,然后当您的应用程序退出时将转储一个句柄列表。

在没有应用程序调试器的情况下,另一种方法是在应用程序退出之前设置断点或暂停。当应用程序暂停时,使用类似 Process Explorer 的工具来获取所有打开的句柄的列表。

出于您的目的,我认为后者是更好的选择。我不确定是否有任何使用调试输出的自动化工具。您可以使用 WDK 的某些功能来检索当前进程(或另一个进程的)打开句柄的列表,但这有点复杂。

关于c++ - 是否有可以链接到现有应用程序的 handle 检漏仪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com