偵錯常式
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
運算子