共用方式為


_ATL_DEBUG_INTERFACES

先前已定義這個巨集包含所有 ATL 標頭檔追蹤您的元件介面的所有 AddRef版本 呼叫至輸出視窗。

#define _ATL_DEBUG_INTERFACES

備註

追蹤輸出會顯示如下所示:

ATL: QIThunk - 2008 AddRef : Object = 0x00d81ba0 Refcount = 1 CBug - IBug

每一個追蹤的第一部分將永遠 ATL: QIThunk。接著識別特定 介面 Thunk 的 值使用。介面 Thunk 是一種物件維護參考計數和所提供的追蹤功能在這個位置。新介面 Thunk 在 [ QueryInterface 的每個呼叫都會建立但必須 IUnknown 介面 (在此例中,相同的 Thunk 每次傳回符合 COM 的識別規則)。

接下來您會看到 AddRef版本 指示要呼叫的方法。接著,您會看到值識別變更介面參考計數的物件。要追蹤的值是物件的 this 指標。

要追蹤的參考計數是 Thunk 的參考計數,在 AddRef版本 之後呼叫。請注意此參考計數可能不符合物件的參考計數。每個 Thunk 維護其本身的參考計數完全可協助您遵守 COM 參考計數的規則。

要追蹤的最後的資訊是 AddRef版本 呼叫的和介面所影響的物件名稱。

偵測到的任何介面遺漏,當伺服器關閉,並 _Module.Term 呼叫這類就會記錄:

ATL: QIThunk - 2005 LEAK : Object = 0x00d81ca0 Refcount = 1 MaxRefCount = 1 CBug - IBug

這裡的資訊提供對應直接寫入上一個追蹤陳述式提供的資訊,因此,您可以檢查參考次數 (Reference Count) 在介面中 Thunk 的整個存留期 (Lifetime)。此外,就能取得完整參考計數的指示該介面的 Thunk。

注意事項注意事項

_ATL_DEBUG_INTERFACES 可用於正式版本組建。

秘訣

  • 您可以使用 Refcount 的新介面 Thunk 何時會尋找 AddRef 呼叫建立 1。

  • 您可以尋找 Release 呼叫時被終結。 Refcount 的介面 Thunk 0。

  • 追蹤陳述式以定位分隔格式輸出,讓您可以輕易地剪貼資訊至報表 (例如 Microsoft Excel 提供進階篩選,搜尋和排序功能。

  • 如果您的程式碼看起來都可正常運作,當 _ATL_DEBUG_INTERFACES 沒有定義時,不過,造成存取違規,在巨集定義時,幾乎一定不相符的參考次數的 Bug 中的用戶端程式碼,類似下列所示的:

    IBug* pBug = NULL;
    hr = p->QueryInterface(&pBug);
    ATLASSERT(SUCCEEDED(hr));
    IBug* pBug2 = NULL;
    hr = p->QueryInterface(&pBug2);
    ATLASSERT(SUCCEEDED(hr));
    pBug->Release();
    pBug->Release();    // Mismatched - should be pBug2->Release();   
    

    這個程式碼可能會在某些常見的狀況下運作,不過,它清楚多 Bug。如需此工作的程式碼時,它會根據提供 IBug 介面 (IBug 的 COM 物件的實作詳細資料無法實作,因為 Tear-Off 介面),並將其位置相關 (用戶端必須是 Apartment 和 IBug 實作相同)。為 _ATL_DEBUG_INTERFACES 巨集的使用方式可以提供這類錯誤燈光。

請參閱

其他資源

偵錯和錯誤報告巨集

ATL 巨集