0:001>!htrace -diff
Handle tracing information snapshot successfully taken.
0x158 new stack traces since the previous snapshot.
Ignoring handles that were already closed...
Outstanding handles opened since the previous snapshot:--------------------------------------
Handle =0x000003a4- OPEN
Thread ID =0x000012bc, Process ID =0x0000130c0x772651ec: ntdll!ZwOpenProcessToken+0x0000000c0x7547748f: KERNELBASE!OpenProcessToken+0x000000140x0120237e: HLeak!CServer::GetToken+0x0000007e0x01201da9: HLeak!CServer::GetSID+0x000000390x012015d3: HLeak!ThreadWorker+0x000000c30x76c21114: kernel32!BaseThreadInitThunk+0x0000000e0x7727b3f5: ntdll!__RtlUserThreadStart+0x000000700x7727b3c8: ntdll!_RtlUserThreadStart+0x0000001b--------------------------------------
……省略N多行信息……
--------------------------------------
Handle =0x0000003c- OPEN
Thread ID =0x0000168c, Process ID =0x0000130c0x772649fc: ntdll!NtCreateEvent+0x0000000c0x772495d7: ntdll!RtlpCreateCriticalSectionSem+0x0000001a0x772495ad: ntdll!RtlpWaitOnCriticalSection+0x000000740x7724fb56: ntdll!RtlEnterCriticalSection+0x000001500x7727b479: ntdll!LdrpInitializeThread+0x000000c60x7727b298: ntdll!_LdrpInitialize+0x000001ad0x7727b2c5: ntdll!LdrInitializeThunk+0x00000010--------------------------------------
Displayed 0x68 stack traces for outstanding handles opened since the previous snapshot.
可以通过这些信息来帮助对句柄泄漏的调试过程。
句柄泄漏回避策略
使用RAII(Resource Acquisition Is Initialization)策略,这个就不多说了,STL里面的auto_ptr就使用了这样了的策略。