0

実行可能ファイルを正しく選択しました。これは、私が行う特定の操作に応答できるようにするためです。しかし、ApplicationVerifier にハンドル リークを適切に検出させることができません。

次に例を示します。

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    HANDLE hFile = CreateFile(_T("C:\\test.txt"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
    return 0;
}

ApplicationVerifier はこれを検出しません。

上記の問題を検出するにはどうすればよいですか?

4

1 に答える 1

1

コードはCreateFileを介してのみハンドルを作成していますか?もしそうなら、これらのメソッドをカスタム実装されたリーク検出を行うバージョンにマクロ化することができます。大変な作業ですが、仕事は終わります。

#if DEBUG
#define CreateFile DebugCreateFile
#define CloseHandle DebugCloseHandle
#endif
// in another cpp file
#undef CreateFile
#undef CloseHandle
HANDLE DebugCreateFile(...) {
  HANDLE real = ::CreateFile(...);
  TrackHandle(real);
  return real;
}
void DebugCloseHandle(HANDLE target) {
  if (IsTracked(target)) { Untrack(target); }
  ::CloseHandle(target);
}
void CheckForLeaks() {
  // Look for still registered handles
}

プログラムの最後に、CheckForLeaksを呼び出す必要があります。私が言ったように、かなりの作業ですが、それはあなたのシナリオに役立つかもしれません。

于 2008-11-25T19:03:56.127 に答える