【问题标题】:ApplicationVerifier is not detecting handle leaks, what do I do?ApplicationVerifier 未检测到句柄泄漏,我该怎么办?
【发布时间】:2008-11-25 18:32:49
【问题描述】:

我确实选择了正确的可执行文件,因为我可以让它响应我所做的某些事情。但我无法让 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 没有检测到这一点。

如何检测上述问题?

【问题讨论】:

    标签: c++ visual-c++ application-verifier


    【解决方案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。就像我说的那样,虽然有很多工作,但它可能对您的场景有所帮助。

    【讨论】:

    • 虽然它通过许多不同的方法来实现,但我只是想简化以找到一个通用的解决方案。
    猜你喜欢
    • 2010-09-23
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多