abort

中止目前的處理序,並傳回錯誤碼。

注意

請勿使用此方法來關閉 Microsoft Store 應用程式或 通用 Windows 平臺 (UWP) 應用程式,但測試或偵錯案例除外。 根據 Microsoft Store 原則,不允許以程式設計或 UI 方式關閉市集應用程式。 如需詳細資訊,請參閱 UWP 應用程式生命週期

語法

void abort( void );

傳回值

abort 不會將控制權傳回呼叫進程。 根據預設,它會檢查是否有中止訊號處理常式;如有設定,則會引發 SIGABRT。 然後,abort 會終止目前的處理序,並將結束代碼傳回父處理序。

備註

Microsoft 特定的

根據預設,當應用程式是以偵錯執行階段程式庫建置時,abort 常式會先顯示錯誤訊息,再引發 SIGABRT。 若是在主控台模式中執行的主控台應用程式,訊息會傳送至 STDERR。 在視窗模式中執行的 Windows 傳統型應用程式和主控台應用程式會在訊息方塊中顯示訊息。 若要隱藏訊息,請使用 _set_abort_behavior 來清除 _WRITE_ABORT_MSG 旗標。 顯示的訊息取決於所使用的執行階段環境版本。 對於使用最新版 Visual C++ 建置的應用程式,訊息會類似下列訊息:

R6010 - 中止() 已呼叫

在舊版 C 執行階段程式庫中,會顯示下列訊息:

此應用程式已要求執行階段以異常方式終止它。 如需詳細資訊,請連絡應用程式支援小組。

當程式是在偵錯模式中編譯時,訊息方塊會顯示 [中止]、[重試] 或 [略過] 選項。 如果使用者選擇 [中止],程式會立即終止,並傳回結束代碼 3。 如果使用者選擇 [重試],則會叫用偵錯工具進行 Just-in-Time 偵錯 (如果有)。 如果使用者選擇 [略過]abort 會繼續正常處理。

在零售和偵錯組建中,abort 會接著檢查是否已設定中止訊號處理常式。 如果設定了非預設訊號處理常式,abort 會呼叫 raise(SIGABRT)。 使用 函式 signal 將中止訊號處理常式函式與 SIGABRT 訊號產生關聯。 您可以執行自訂動作 (例如清除資源或記錄資訊),然後終止應用程式並在處理函式中顯示您自己的錯誤碼。 如果未定義任何自訂訊號處理常式, abort 則不會引發 SIGABRT 訊號。

根據預設,在桌面或主控台應用程式的非偵錯組建中, abort 然後叫用Windows 錯誤報告服務機制(先前稱為 Watson 博士)向 Microsoft 回報失敗。 此行為可藉由呼叫 _set_abort_behavior 和設定來啟用,或藉由遮罩 _CALL_REPORTFAULT 旗標來停用。 設定旗標時,Windows 會顯示訊息方塊,其文字類似「問題導致程式無法正常運作」。使用者可以選擇使用 [偵錯] 按鈕叫用 偵錯工具,或選擇 [關閉程式 ] 按鈕,以使用作業系統所定義的錯誤碼來終止應用程式。

如果未叫用 Windows 錯誤報告處理常式,則 abort 呼叫 _exit 以結束代碼 3 終止進程,並將控制權傳回父進程或作業系統。 _exit不會排清資料流程緩衝區或進行 atexit/_onexit 處理。

基於 Windows 相容性的原因,呼叫 時 abort_exit ,它可能會叫用 Windows ExitProcess API,進而允許 DLL 終止常式執行。 解構函式不會在可執行檔中執行,但可執行檔進程空間中載入的 DLL 可能不相同。 此行為不符合 C++ 標準。 若要立即終止包含任何 DLL 的進程,請使用 Windows TerminateProcess API。 您也可以註冊中止訊號處理常式,以叫用 TerminateProcess 符合標準的行為。 符合規範的行為可能會以 Windows 相容性為代價。

如需 CRT 偵錯的詳細資訊,請參閱 CRT 偵錯技術

End Microsoft Specific

根據預設,此函式的全域狀態會限定于應用程式。 若要變更它,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭
abort <process.h><stdlib.h>

範例

下列程式會嘗試開啟檔案,並在嘗試失敗時中止。

// crt_abort.c
// compile with: /TC
// This program demonstrates the use of
// the abort function by attempting to open a file
// and aborts if the attempt fails.

#include  <stdio.h>
#include  <stdlib.h>

int main( void )
{
    FILE    *stream = NULL;
    errno_t err = 0;

    err = fopen_s(&stream, "NOSUCHF.ILE", "r" );
    if ((err != 0) || (stream == NULL))
    {
        perror( "File could not be opened" );
        abort();
    }
    else
    {
        fclose( stream );
    }
}
File could not be opened: No such file or directory

另請參閱

使用 abort
abort 功能
進程和環境控制
_exec_wexec 函式
exit, _Exit, _exit
raise
signal
_spawn_wspawn 函式
_DEBUG
_set_abort_behavior