共用方式為


使用_crtBreakAlloc對記憶體配置進行偵錯

本文說明如何使用 來 _crtBreakAlloc 偵錯記憶體配置。

原始產品版本: Visual C++
原始 KB 編號: 151585

摘要

使用偵錯 C-Runtime (CRT) 追蹤記憶體流失時,在配置造成流失的記憶體之前,最好立即設定斷點。 藉由在編譯時間或運行時間進行設定 _crtBreakAlloc ,您可以在特定記憶體配置點造成使用者定義的斷點。

其他相關資訊

使用 Debug-CRT 函式追蹤記憶體流失時,通常會 _CrtDumpMemoryLeaks顯示以大括弧 ({}) 括住的配置編號。 例如,以下是配置編號 18 的記憶體流失:

偵測到記憶體流失!
傾印物件 ->
{18} 標準區塊,0x00660BE4,10 個字節長
數據: <> CD CD
對象傾印完成。

在配置此記憶體之前設定斷點很有用,以便您可以逐步執行 callstack,並查看哪些函式導致此記憶體配置。 Debug-CRT 函式 _CrtSetBreakAlloc ,可讓您指定要中斷的配置編號。 此方法會要求您每次想要設定配置斷點時,重新編譯程式。 替代方法是使用 [監看式] 視窗,並動態設定配置斷點。 此方法的優點是不需要任何原始碼變更或重新編譯。

如果您要靜態連結至 C 執行時間,則您要變更的變數稱為 _crtBreakAlloc。 如果您要動態連結至 C 運行時間,您要在 [監看式] 視窗中變更的變數是 {,,msvcr40d.dll}__p__crtBreakAlloc() 如果您使用 Visual C++ 4.0 或 4.1。 如果您要使用 Visual C++ 4.2 或更新版本,則您想要在 [監看式] 視窗中變更的變數應該是 {,,msvcrtd.dll}__p__crtBreakAlloc()

若要判斷您要編譯的CRT版本:

  1. 從 [ 建置] 功能表中,選擇 [ 設定]。

  2. 在 [ 設定 :] 窗格中,選取您要建置的組態。 選擇 [ C/C++] 索引標籤,然後選取 [ 程序代碼產生 ] 類別。

[使用運行時間連結庫] 對話框應該會顯示您所使用的CRT版本。 (如果此設定是空白的,請確定您在 [設定] 窗格上只選取了一個組態。

若要動態設定配置斷點,請執行下列步驟:

  1. 啟動偵錯會話。 從 [建置] 功能表中,選擇 [偵錯 -> 逐步執行]。 如果您使用「偵錯單個線程」或「偵錯多線程CRT」,請遵循步驟1a。 否則,請遵循步驟 1b。

    1. 在 [監看式] 視窗中輸入 _crtBreakAlloc 。 這會顯示程式將停止的目前配置編號。 當您的程式第一次啟動時,此配置編號應該是 -1。

    2. 如果您使用 Visual C++ 4.0 或 4.1,請在 [監看式] 視窗中輸入 {,msvcr40d.dll}__p__crtBreakAlloc( )。 如果您使用 Visual C++ 4.2 或更新版本,請輸入 {,msvcrtd.dll}__p__crtBreakAlloc( )。 這會顯示程式將停止的目前配置編號。 當您的程式第一次啟動時,此配置編號應該是 -1。

  2. 按兩下 -1 值,然後輸入導致使用者定義斷點的新配置編號。

  3. 從 [ 偵錯] 功能表中,選擇 [ 偵錯 ] ->Go

如需 的詳細資訊 _crtBreakAlloc,請參閱 在線說明中的追蹤堆積配置要求