偵錯常式

C 執行階段程式庫的偵錯版本提供許多診斷服務,使得偵錯程式容易使用,並允許開發人員︰

  • 在偵錯期間直接進入執行階段函式

  • 解決判斷提示、錯誤和例外狀況

  • 追蹤堆積配置及預防記憶體流失

  • 向使用者報告偵錯訊息

C 執行階段程式庫常式的偵錯版本

若要使用這些常式, _DEBUG 必須定義 旗標。 所有這些常式在應用程式的零售版中不執行任何動作。 如需如何使用新偵錯常式的詳細資訊,請參閱 CRT 偵錯技術

常式 使用
_ASSERT 評估運算式,並在結果為 時產生偵錯報告 FALSE
_ASSERTE 類似 _ASSERT,但產生的報表中會包含失敗的運算式。
_CrtCheckMemory 確認偵錯堆積中配置的記憶體區塊完整性
_CrtDbgBreak 設定中斷點。
_CrtDbgReport, _CrtDbgReportW 產生具有使用者訊息的偵錯報表,並將報表傳送至三個可能的目的地。
_CrtDoForAllClientObjects 針對堆積中的所有 _CLIENT_BLOCK 類型呼叫應用程式提供的函式
_CrtDumpMemoryLeaks 發生嚴重的記憶體流失時,傾印偵錯堆積所有的記憶體區塊。
_CrtIsMemoryBlock 確認指定的記憶體區塊位於本機堆積內,且具有有效的偵錯堆積區塊類型識別項。
_CrtIsValidHeapPointer 確認本機堆積中有指定的指標
_CrtIsValidPointer 驗證指定的記憶體範圍是否可有效用於讀取和寫入
_CrtMemCheckpoint 取得偵錯堆積的目前狀態,並儲存在應用程式提供的 _CrtMemState 結構中。
_CrtMemDifference 比較兩個記憶體狀態是否有重大差異並傳回結果
_CrtMemDumpAllObjectsSince 傾印堆積物件自採用的指定檢查點之後,或從程式執行開始的資訊。
_CrtMemDumpStatistics 以使用者可讀的格式,傾印指定記憶體狀態的偵錯標頭資訊。
_CrtReportBlockType 傳回與指定偵錯堆積區塊指標相關聯的區塊類型/子類型。
_CrtSetAllocHook 將用戶端定義的配置函式連結到 C 執行階段偵錯記憶體配置處理序,以進行安裝。
_CrtSetBreakAlloc 在指定的物件配置順序編號設定中斷點
_CrtSetDbgFlag 擷取或修改 _crtDbgFlag 旗標的狀態,以控制偵錯堆積管理員的配置行為。
_CrtSetDumpClient 安裝應用程式定義的函式,每次呼叫偵錯傾印函式傾印 _CLIENT_BLOCK 類型記憶體區塊時都會呼叫此函式。
_CrtSetReportFile 找出要依 _CrtDbgReport 用為特定報表類型目的地的檔案或資料流
_CrtSetReportHook 將用戶端定義的報告函式連結到 C 執行階段偵錯報告處理序,以進行安裝。
_CrtSetReportHook2, _CrtSetReportHookW2 將用戶端定義的報告函式連結到 C 執行階段偵錯報告處理序,以進行安裝或解除安裝。
_CrtSetReportMode 指定 _CrtDbgReport 產生的特定報表類型的一般目的地
_RPT[0,1,2,3,4] 呼叫有格式字串和可變引數數目的 _CrtDbgReport 產生偵錯報表,來追蹤應用程式的進度。 不提供任何來源檔案和行號資訊。
_RPTF[0,1,2,3,4] 類似 _RPTn 巨集,但提供提出報告要求的來源檔案名稱和行號。
_calloc_dbg 在堆積上配置指定數目的記憶體區塊,並具有偵錯標頭的額外空間並覆寫緩衝區
_expand_dbg 以展開或收縮區塊的方式,調整堆積的指定記憶體區塊大小。
_free_dbg 釋放堆積的記憶體區塊
_fullpath_dbg, _wfullpath_dbg 使用 _malloc_dbg 來配置記憶體,為指定的相對路徑名稱建立絕對或完整路徑名稱。
_getcwd_dbg, _wgetcwd_dbg 使用 取得目前的工作目錄, _malloc_dbg 以配置記憶體。
_malloc_dbg 在堆積上配置記憶體區塊,並具有偵錯標頭的額外空間並覆寫緩衝區
_msize_dbg 計算堆積的記憶體區塊大小
_realloc_dbg 以移動及/或調整區塊大小的方式,重新配置堆積的指定記憶體區塊。
_strdup_dbg, _wcsdup_dbg 使用 來配置記憶體, _malloc_dbg 重複字串。
_tempnam_dbg, _wtempnam_dbg 產生可用來建立暫存檔的名稱,並使用 _malloc_dbg 來配置記憶體。

原始程式碼表單中無法使用的 C 執行時間常式

在偵錯過程中,偵錯工具可以用來逐步執行大部分 C 執行階段常式的原始程式碼。 不過,Microsoft 會將某些技術視為專屬,因此不會提供這些常式子集的原始程式碼。 這些常式大部分屬於例外狀況處理或浮點處理群組,但也包含少數的其他類型。 下表會列出這些常式。

雖然大部分 和 scanf 常式都可以使用 printf 原始程式碼,但它們會針對未提供原始程式碼的另一個常式進行內部呼叫。

應用程式偵錯版中行為不同的常式

從應用程式的偵錯組建呼叫時,某些 C 執行階段函式和 C++ 運算子的行為會不一樣。 (您可以藉由定義 _DEBUG 旗標,或使用 C 執行時間程式庫的偵錯版本來建立應用程式的偵錯組建。行為差異通常由常式提供的額外功能或資訊所組成,以支援偵錯程式。 下表會列出這些常式。

C abort 常式

C assert 常式

C++ delete 運算子

C++ new 運算子

另請參閱

依類別排序的通用 C 執行階段常式
執行時間錯誤檢查