HOW TO:使用偵錯堆積
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
僅適用原生 |
|||
Standard 版 |
僅適用原生 |
|||
Pro/Team 版 |
僅適用原生 |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
所有堆積函式的呼叫,例如 malloc、free、calloc、realloc、new 和 delete 都會解析成操作於偵錯堆積裡的這些函式之偵錯版本。當您釋放記憶體區塊時,偵錯堆積會自動檢查配置區域每端的緩衝區之完整性,如果發生覆寫發便會發出錯誤報告。
若要使用偵錯堆積
- 以 C 執行階段程式庫的偵錯版本連結您應用程式的偵錯組建。
若要變更一個或多個 _crtDbgFlag 位元欄位並建立旗標的新狀態
使用設為 _CRTDBG_REPORT_FLAG (為取得目前的 _crtDbgFlag 狀態) 的 newFlag 參數來呼叫 _CrtSetDbgFlag,且將傳回值儲存在暫存變數中。
使用 OR (位元 (Bitwise) | 符號) 暫存變數和對應的位元遮罩 (以資訊清單常數 (Manifest Constant) 表示於應用程式程式碼) 來開啟任何位元。
使用 AND (位元 & 符號) 變數和適當位元遮罩的 NOT (位元 ~ 符號) 來關閉其他位元。
使用設成儲存於暫存變數值的 newFlag 參數呼叫 _CrtSetDbgFlag,以便建立 _crtDbgFlag 的新狀態。
範例
例如,下列程式碼開啟自動遺漏偵測並且關閉類型 _CRT_BLOCK 的區塊檢查:
// Get current flag
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;
// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );