_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
報表類型:_CRT_WARN_CRT_ERROR_CRT_ASSERT

filename
發生判斷提示/報表之原始程式檔的名稱的指標,或為 NULL

lineNumber
發生判斷提示/報表之原始程式檔中的行號,或為 NULL

moduleName
發生判斷提示或報表之模組 (.exe 或 .dll) 的名稱的指標。

format
用於建立使用者訊息之格式控制字串的指標。

argument
format 使用的選擇性替換引數。

傳回值

針對所有報告目的地,如果發生錯誤, _CrtDbgReport_CrtDbgReportW 傳回 -1;如果沒有發生錯誤,則傳回 0。 不過,當報表目的地是偵錯訊息視窗,而使用者選擇 [ 重試 ] 按鈕時,這些函式會傳回 1。 如果使用者在 [偵錯訊息] 視窗中選擇 [中止 ] 按鈕,這些函式會立即中止,且不會傳回值。

_RPTF_RPT 錯宏會呼叫 _CrtDbgReport 以產生其偵錯報告。 這些宏的寬字元版本,以及 _ASSERT_ASSERTE_RPTW_RPTFW ,會使用 _CrtDbgReportW 來產生其偵錯報告。 當或 _CrtDbgReportW 傳回 1 時 _CrtDbgReport ,如果啟用 Just-In-Time (JIT) 偵錯,這些宏會啟動偵錯工具。

備註

_CrtDbgReport_CrtDbgReportW 可以將偵錯報告傳送至三個不同的目的地:偵錯報表檔案、偵錯監視器(Visual Studio 偵錯工具),或偵錯訊息視窗。 和 兩個組態函式 _CrtSetReportMode_CrtSetReportFile 可用來指定每個報表類型的目的地或目的地。 這些函式可供分別控制報告目的地和每個報表類型的目的地。 例如,您可以指定 reportType_CRT_WARN 只能移至偵錯監視器,而 reportType_CRT_ASSERT 的 會同時移至偵錯訊息視窗和使用者定義的報表檔案。

_CrtDbgReportW 是寬字元版本的 _CrtDbgReport。 其所有輸出和字串參數都是寬字元字串;否則,它與單一位元組字元版本相同。

_CrtDbgReport並使用 _CrtDbgReportWwprintf 函式所 printf 定義的相同規則,將引數取代 argument[n]format 字串,以建立偵錯報表的使用者訊息。 然後這些函式會根據目前的報表模組以及針對 reportType 所定義的檔案,產生偵錯報表並決定一或多個目的地。 當報表是傳送至偵錯訊息視窗時,會在顯示於視窗中的資訊裡包含 filenamelineNumbermoduleName

下表列出針對報表的一或多個模式和檔案,以及 _CrtDbgReport_CrtDbgReportW 的結果行為所提供的選擇。 這些選項會在 crtdbg.h > 中 < 定義為位旗標。

報表模式 報表檔案 _CrtDbgReport_CrtDbgReportW 行為
_CRTDBG_MODE_DEBUG 不適用 使用 Windows OutputDebugString API 寫入訊息。
_CRTDBG_MODE_WNDW 不適用 呼叫 Windows MessageBox API 來建立訊息方塊,以顯示訊息以及 中止 重試 忽略 按鈕。 如果使用者選擇 [中止 ], _CrtDbgReport_CrtDbgReport 立即中止。 如果使用者選擇 [ 重試 ],則會傳回 1。 如果使用者選擇 [忽略 ],則執行會繼續並 _CrtDbgReportW_CrtDbgReport 傳回 0。 當錯誤狀況存在時,選擇 [忽略 ] 通常會導致未定義的行為。
_CRTDBG_MODE_FILE __HFILE 使用 Windows WriteFile API 將訊息寫入使用者提供的 HANDLE ,且不會驗證檔案控制代碼的有效性;應用程式負責開啟報表檔案並傳遞有效的檔案控制代碼。
_CRTDBG_MODE_FILE _CRTDBG_FILE_STDERR 將訊息寫入至 stderr
_CRTDBG_MODE_FILE _CRTDBG_FILE_STDOUT 將訊息寫入至 stdout

可將報表傳送至一到三個目的地,或是傳送到沒有任何目的地。 如需指定報表模式或模式和報表檔案的詳細資訊,請參閱 _CrtSetReportMode_CrtSetReportFile 函式。 如需使用偵錯宏和報告函式的詳細資訊,請參閱 報告 宏。

如果您的應用程式比 和 _CrtDbgReportW 所提供的 _CrtDbgReport 彈性還要多,您可以使用 函式撰寫自己的報告函式,並將其連結至 C 執行時間程式庫報告機制 _CrtSetReportHook

需求

常式 必要的標頭
_CrtDbgReport <crtdbg.h>
_CrtDbgReportW <crtdbg.h>

_CrtDbgReport_CrtDbgReportW 是 Microsoft 擴充功能。 如需詳細資訊,請參閱相容性

程式庫

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

範例

// crt_crtdbgreport.c
#include <crtdbg.h>

int main(int argc, char *argv[]) {
#ifdef _DEBUG
   _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, argv[0], NULL);
#endif
}

如需如何變更報表函式的範例,請參閱 crt_dbg2

另請參閱

偵錯常式
_CrtSetReportMode
_CrtSetReportFile
printf, _printf_l, wprintf, _wprintf_l
_DEBUG