_CrtDbgReport _CrtDbgReportW
會產生報告,以偵錯訊息並傳送報表給三個可能的目的地 (偵錯版本)。
int _CrtDbgReport(
int reportType,
const char *filename,
int linenumber,
const char *moduleName,
const char *format [,
argument] ...
);
int _CrtDbgReportW(
int reportType,
const wchar_t *filename,
int linenumber,
const wchar_t *moduleName,
const wchar_t *format [,
argument] ...
);
參數
reportType
Report type: _CRT_WARN, _CRT_ERROR, and _CRT_ASSERT.filename
判斷提示/報表的發生位置的原始程式檔名稱的指標或NULL。linenumber
行號報告判斷提示的發生位置的原始程式檔中或NULL。moduleName
模組 (.exe 或.dll) 發生判斷提示/報表名稱的指標。format
用來建立使用者的訊息的控制項的格式字串的指標。argument
選擇性的替換所使用的引數format。
傳回值
所有的報表目的地, _CrtDbgReport和_CrtDbgReportW傳回 – 1,如果發生錯誤,是 0,如果不發生任何錯誤。 不過,當報告的目標是偵錯訊息視窗和使用者按下Retry ] 按鈕,這些函數會傳回 1。 如果使用者按一下Abort按鈕在偵錯訊息] 視窗中,這些函式立即中止,不會傳回值。
_RPT、 _RPTF 偵錯巨集呼叫_CrtDbgReport產生其偵錯報告。 這些巨集的寬字元版本,以及 _ASSERT [E, _RPTWn和_RPTFWn,使用_CrtDbgReportW產生其偵錯報告。 當_CrtDbgReport或_CrtDbgReportW傳回 1,前提是啟用就是即時 (JIT) 偵錯時,這些巨集開始偵錯工具。
備註
_CrtDbgReport與_CrtDbgReportW可以將偵錯報告傳送給三個不同的目的地: 偵錯報告檔、 偵錯監視器 ( Visual Studio偵錯工具),或偵錯訊息視窗。 兩個設定函式, _CrtSetReportMode 和 _CrtSetReportFile,用來指定目的地 」 或 「 每一種報表類型的目的地。 這些功能讓某些報告的目的或個別控制每一種報表類型的目的地。 比方說,就可以指定讓reportType的_CRT_WARN只會傳送至偵錯監視器,而reportType的_CRT_ASSERT傳送至偵錯訊息視窗和使用者定義的報表檔案。
_CrtDbgReportW是的寬字元版本_CrtDbgReport。 所有其字串和輸出參數都位於寬字元字串。 否則,它是單一位元組字元集版本完全相同。
_CrtDbgReport與_CrtDbgReportW使用者來建立郵件偵錯報表以取代argumentn 引數到format字串,使用相同的規則所定義的printf或wprintf函式。 這些函式然後產生偵錯報告,並判斷目的地或目的地,根據目前的報表模式及檔案所定義的reportType。 當報告傳送至偵錯訊息] 視窗中, filename, lineNumber,以及moduleName包含在視窗中顯示的資訊。
下表列出可用的選項為報表模式或模式及檔案以及所產生的行為的_CrtDbgReport和_CrtDbgReportW。 這些選項會定義為在 Crtdbg.h 中的位元旗標。
報告模式 |
報表檔案 |
_CrtDbgReport_CrtDbgReportW行為 |
---|---|---|
_CRTDBG_MODE_DEBUG |
不適用 |
將訊息寫入至 Windows OutputDebugString API。 |
_CRTDBG_MODE_WNDW |
不適用 |
呼叫 Windows MessageBox API 來建立訊息方塊顯示的訊息,以及Abort, Retry,以及Ignore按鈕。 如果使用者按一下Abort, _CrtDbgReport或_CrtDbgReport立即中止。 如果使用者按一下Retry,它將傳回 1。 如果使用者按一下Ignore,會繼續執行,並_CrtDbgReport和_CrtDbgReportW傳回 0。 請注意,按一下 [ Ignore的錯誤情況存在時通常會導致 「 未定義的行為"。 |
_CRTDBG_MODE_FILE |
__HFILE |
為使用者提供的寫入訊息HANDLE,使用 Windows WriteFile API 並不會驗證有效的檔案控制代碼。 應用程式負責開啟報告檔案,並傳遞有效的檔案控制代碼。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDERR |
寫入訊息至stderr。 |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDOUT |
寫入訊息至stdout。 |
報表可傳送給一、 兩個或三個目的地,或沒有目的地根本。 如需有關如何指定報表模式或模式和報告檔的詳細資訊,請參閱 _CrtSetReportMode 和 _CrtSetReportFile 函式。 如需有關使用偵錯巨集,並報告函式的詳細資訊,請參閱來進行驗證和報告使用的巨集。
如果您的應用程式需要靈活彈性更勝所提供的_CrtDbgReport和_CrtDbgReportW,您可以撰寫自己的報告函式,並將它連結至報告機制,藉由使用 c 執行階段程式庫 _CrtSetReportHook 函式。
需求
常式 |
所需的標頭 |
---|---|
_CrtDbgReport |
<crtdbg.h> |
_CrtDbgReportW |
<crtdbg.h> |
如需相容性資訊,請參閱相容性在簡介中。
文件庫
偵錯版本的 C 執行階段程式庫只。
範例
// crt_crtdbgreport.c
#include <crtdbg.h>
int main() {
#ifdef _DEBUG
CrtDbgReport(_CRT_ASSERT, NULL, NULL, "some module", NULL);
#endif
}
請參閱 crt_dbg2 如需如何變更報告函式的範例。