TRACE 是 MFC 提供的除錯巨集,功能類似 printf,但僅存在於 Debug 版本,Release 編譯時自動消失,不增加發布版本體積與效能負擔。
TRACE("這是純文字訊息");
TRACE("整數: %d, 字串: %s", 123, "Hello");
TRACE("十六進位: 0x%08X", hr);
支援標準 printf 格式字串。
TRACE0("無參數訊息") — 無額外參數,編譯最精簡TRACE1("一個參數: %d", val)TRACE2("兩個參數: %d, %s", val, str)TRACE3 等使用對應變體可避免變參處理開銷,Debug 版本效能略優。
#ifdef _DEBUG
#define MY_TRACE TRACE
#else
#define MY_TRACE __noop
#endif
MY_TRACE("模組初始化完成,句柄=0x%p", hMod);
在中斷點條件欄輸入 TRACE("進入函式, 參數=%d", nParam), 0 可在不修改原始碼情況下輸出除錯資訊。
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 配合 TRACE 輸出配置/釋放堆疊資訊
| 誤區 | 正確觀念 |
|---|---|
| Release 版也會輸出 | Release 編譯時宏展開為空,零指令 |
| 獨立執行 Debug exe 可見輸出 | 需附加偵錯器或使用 DebugView 等工具捕捉 OutputDebugString |
| TRACE 可用於正式日誌 | 僅供開發期除錯,正式日誌請用專用記錄庫 |
善用 TRACE 系列巨集能大幅提升除錯效率,配合條件中斷點、自訂宏封裝,讓除錯資訊「有求必應、Release 無痕」。