共用方式為


_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。 若使用者在偵錯訊息視窗中按一下 [中止] 按鈕,這些函示會立即中止且不會傳回值。

_RPT, _RPTF 偵錯巨集會呼叫 _CrtDbgReport 以產生偵錯報表。 這些巨集的寬字元版以及 _ASSERT[E]_RPTWn 和 _RPTFWn,均會使用 _CrtDbgReportW 產生偵錯報表。 若有啟用 Just-In-Time (JIT) 偵錯,則當 _CrtDbgReport_CrtDbgReportW 傳回 1 時,這些巨集就會啟動偵錯工具。

備註

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

_CrtDbgReportW 是寬字元版本的 _CrtDbgReport。 且其輸出和字串參數都會使用寬字元字串;除此之外都和單一位元組字元版本相同。

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

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

報表模式

報表檔案

_CrtDbgReport_CrtDbgReportW 行為

_CRTDBG_MODE_DEBUG

不適用

使用 Windows OutputDebugString (英文) API 寫入訊息。

_CRTDBG_MODE_WNDW

不適用

呼叫 Windows MessageBox API 建立訊息方塊,以顯示訊息和 [中止]、[重試] 與 [忽略] 按鈕。 若使用者按一下 [中止],_CrtDbgReport_CrtDbgReport 會立即中止。 若使用者按一下 [重試],則會傳回 1。 若使用者按一下 [忽略],執行會繼續,且 _CrtDbgReport_CrtDbgReportW 會傳回 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 函式。 如需使用偵錯巨集和報告函式的詳細資訊,請參閱 報告巨集

若您的應用程式需要比 _CrtDbgReport_CrtDbgReportW 所提供的更多彈性,您可以自行撰寫報告函式,並使用 _CrtSetReportHook 函式,將該報告函式附加至 C 執行階段程式庫報告機制。

需求

常式

必要的標頭

_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

.NET Framework 對等用法

請參閱

參考

偵錯常式

_CrtSetReportMode

_CrtSetReportFile

printf、_printf_l、wprintf、_wprintf_l

_DEBUG