使用Win32 C++检测文件句柄泄漏

Bri*_*ndy 8 c++ winapi visual-c++

是否有某种方法可以在程序终止时检测文件句柄泄漏?

特别是我想确保所有创建的句柄都在代码中释放.

例如,我可能在某个地方有一个CreateFile(),在程序终止时,我想检测并确保所有这些都关闭.

Jor*_*ans 7

如果可以的话(即如果它不是一个巨大的遗留代码库,你就是错误修正),你应该考虑使用RAII成语来包裹你的文件句柄.通过在构造函数中"获取"文件句柄并在析构函数中释放它,您可以确保在RAII超出范围时,您的文件句柄也可以很好地清理.

它与智能指针的原理相同,在您的工具箱中有一个非常有用的概念,可以避免C++中的这类问题.


Viv*_*edt 5

我使用了windbg的!htrace命令.

!htrace -enable
!htrace -snapshot
!htrace -diff
Run Code Online (Sandbox Code Playgroud)

允许您比较两个执行点的句柄情况,并帮助您找到已分配泄漏句柄的位置.

它对我很有用.