Библиотека среды отладки Visual C ++ имеет так называемые хуки выделения . Работает так: вы определяете обратный вызов и вызываете _CrtSetAllocHook()
, чтобы установить этот обратный вызов. Теперь каждый раз, когда выполняется выделение / освобождение / перераспределение памяти, CRT вызывает этот обратный вызов и передает несколько параметров.
Я успешно использовал ловушку выделения, чтобы найти утечку воспроизводимой памяти - в основном CRT сообщил, что при завершении программы имел место несвободный блок с номером выделения N (N был одинаковым при каждом запуске программы), поэтому Я написал следующее в моем крючке:
int MyAllocHook( int allocType, void* userData, size_t size, int blockType,
long requestNumber, const unsigned char* filename, int lineNumber)
{
if( requestNumber == TheNumberReported ) {
Sleep( 0 );// a line to put breakpoint on
}
return TRUE;
}
поскольку утечка сообщалась с одним и тем же номером распределения каждый раз, когда я мог просто поставить точку останова внутри оператора if и подождать, пока она не будет достигнута, а затем проверить стек вызовов.
Какие еще полезные вещи я могу сделать, используя перехватчики выделения?