物件傾印

這個主題適用於:

版本

Visual Basic

C#

F#

C++

Web Developer

Express

標題不適用於 標題不適用於 標題不適用於

僅適用原生

標題不適用於

Pro、Premium 和 Ultimate

標題不適用於 標題不適用於 標題不適用於

僅適用原生

標題不適用於

在 MFC 程式中,您可以使用 CMemoryState::DumpAllObjectsSince 來傾印堆積上尚未解除配置之所有物件的描述。 DumpAllObjectsSince 會傾印從上一個 CMemoryState::Checkpoint 之後配置的所有物件。 如果沒有發生 Checkpoint 呼叫,DumpAllObjectsSince 會傾印目前在記憶體的所有物件和非物件。

注意事項注意事項

您必須先啟用 HOW TO:啟用記憶體診斷,才能使用 MFC 物件傾印。

注意事項注意事項

MFC 會在程式結束時自動傾印所有的遺漏物件,因此您不需要建立程式碼來傾印這個時候的物件。

下列程式碼會比較兩個記憶體狀態來測試記憶體遺漏,如果偵測到遺漏便會傾印所有物件:

遺留碼範例

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpAllObjectsSince();
}

傾印的內容看起來像這樣:

Dumping objects ->

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

{1} strcore.cpp(80) : non-object block at $00A7516E, 25 bytes long

健全的程式設計

大多數程式碼一開頭括號裡的數字便指定了物件配置的順序。 最近配置的物件的數字最高,且會出現在傾印的最上方。 如需這個範例分析的詳細資訊,請參閱物件傾印解譯

若要從物件傾印取得最大量的資訊,您可以覆寫任何 CObject 衍生物件的 Dump 成員函式來進行物件傾印自訂

您可以將全域變數 _afxBreakAlloc 設定為顯示在括號裡的數字,將中斷點設於特定記憶體配置上。 如果您重新執行該程式,則當此配置發生時,偵錯工具會中斷執行。 然後您可以查看呼叫堆疊來檢視程式如何到達此點。

C 執行階段程式庫中類似此功能的函式是 _CrtSetBreakAlloc,可用於 C 執行階段配置。

請參閱

其他資源

MFC 中的記憶體遺漏