WinDbg を使用して、ハンドルの割り当てにつながるコールスタックを知ることができるかどうか疑問に思っています。
例えば:
#include <windows.h>
#include <conio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Press ENTER to leak handles." << endl;
_getch();
cout << "Leaking handles" << endl;
for (int i = 0; i < 100; ++i)
{
HANDLE h = CreateEvent(NULL, FALSE, FALSE, NULL);
if (h != NULL)
{
cout << ".";
}
}
cout << "Handles leaked. Press ENTER to exit." << endl;
_getch();
return 0;
}
このサンプルをビルドして WinDbg で起動すると、次の行の上のサンプルで、ハンドルを割り当てたコールスタックを取得できます。
HANDLE h = CreateEvent(NULL, FALSE, FALSE, NULL);
コマンドをいじっています!handle
が、これまでのところ進歩はありません。
これは、リーク分析を処理するのに適しています。私は認識し!htrace -enable
て!htrace -diff
いますが、これは別の使用シナリオです (何らかの方法で組み合わせる方法や他の使用ベクトルがない限り、情報を提供してください)。