Если вы не можете позволить себе BoundsChecker или подобное ...
Один прием, который я использовал, - заменить CreateFile
и т. Д. Моими собственными обертками. В дополнение к возвращению значения дескриптора, они делают запись __FILE__ и __LINE__ для каждого дескриптора. Вам также нужно будет обернуть CloseHandle
, чтобы убедиться, что правильно закрытые маркеры не вызывают ложных срабатываний.
Это так же просто, как:
// StdAfx.h
#include <windows.h>
#undef CreateFile
#if defined(UNICODE)
#define CreateFile DbgCreateFileW
#else
#define CreateFile DbgCreateFileA
#endif
// etc.
Затем вы определяете DbgCreateFileW
и DbgCreateFileA
где-то в своем коде.
Это предполагает, что у вас есть контроль над соответствующими частями кода. Если нет, то вы можете сделать что-то подобное, используя (например) Microsoft Detours (вам потребуется лицензия, чтобы включить его в выпущенный продукт, но я считаю, что его можно использовать бесплатно для отладки / тестирования / и т. Д.)
Однако в долгосрочной перспективе вам следует обратить внимание на преобразование кода в «умный» тип дескриптора, который автоматически вызывает CloseHandle
, когда он выходит из области видимости.