abort
中止目前的處理序,並傳回錯誤碼。
注意
請勿使用此方法關閉 Microsoft Store 應用程式或 通用 Windows 平台 (UWP) 應用程式,但測試或偵錯案例除外。 根據 Microsoft 市集原則,不允許以程式設計或 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