2011-10-21 88 views
3

在我的一個應用程序中,我觀察到越來越多的手柄。該數字大約每秒都會增加,而不使用應用程序,因此在後臺處理代碼的某些部分中必定存在句柄泄漏。如何跟蹤處理泄漏?

如何跟蹤這種泄漏?有沒有什麼工具可以幫助解決這個問題?跟蹤處理泄漏時尋找什麼樣的模式?導致手柄泄漏的最常見錯誤是什麼?

一大堆的問題,但我希望他們有關係,足以讓他們在一個問題。感謝您提前提出任何意見!

回答

4

我建議使用Process Explorer。以管理員身份運行它,以確保您能看到所有相關數據。在那裏你可以觀察你的過程有哪些類型的句柄,哪些過度被創建,而不是free'd。這應該有助於縮小搜索範圍(在我的情況中,由於對winsocks行爲的一些錯誤假設,我的套接字漏到了整個地方)。也許那時你可以隔離相關的代碼並將其發佈在這裏,以便我們檢查是否有任何錯誤。祝你好運!

+0

+1謝謝!我知道ProcessExplorer,但並未將其用於此目的。正在泄漏的手柄是節柄。看到我的後續問題:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

5

一些廓(即AQTime)可以配置文件的Windows資源的應用程序。如果您使用XE,則可以使用AQTime的基本版本。

句柄泄漏是常見的,如果執行路徑不正確地關閉它們 - 但在Windows句柄是在很多不同的情況用了一個很普通的項目,哪一種把手的是應用程序泄露?

+0

+1謝謝!我必須嘗試AQTime。原來,我的應用程序正在泄漏節柄。請看看後續問題:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

+1

像AQTime一個分析器能夠告訴你在哪裏泄露的手柄已經創建。使用Process Explorer會更困難些,因爲它可以顯示調用堆棧,但它並不像AQTime那樣記錄信息 - 雖然AQTime因此而「更加重要」。你也可以嘗試進程監視器,它實際上記錄了許多這些調用。無論如何,如果你有像AQTime這樣的分析器可用,恕我直言,這是最好的工具來完成這樣的事情。當您必須檢查可以安裝AQTime或類似系統的系統時,PE/PM是非常有價值的工具。 – 2011-10-21 13:05:35