Мне интересно, можно ли использовать WinDbg для kwown callstack, которые приводят к распределению дескриптора.Где был выделен дескриптор?
Например:
#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
, но это другой сценарий использования (если для его использования не существует какого-либо способа комбинирования или другого вектора использования, просьба предоставить информацию).