C언어/stdlib.h

[C언어] abort 함수 (프로그램 중단, 비정상 종료)

아무일도없었다 2023. 3. 1. 17:11

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 SIGABRT 시그널을 발생시켜 프로그램의 비정상 종료를 의도한다.

헤더

#include <stdlib.h>

※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

void abort();

파라미터

  • void

반환값

없음 (void)

잡학지식

abort 함수는 프로그램을 강제종료하는 함수라고 생각하면 된다.

 

따라서 24시간 서비스를 제공해야하는 프로그램이거나 예외처리를 하는 방향에서는 사용하면 안된다.

 

abort 함수는 보통 프로그램을 테스트하는데 자주 사용하며, 유닛테스트(unittest) 에서 활용하는것을 자주 볼 수 있다.

 

SIGABRT 시그널을 발생시켜서 프로그램을 종료시키기 때문에 signal handler를 설치하여 SIGABRT 가 발생하는것을 확인할 수 있다.

 

추가로 Windows의 Visual Studio를 사용하여 컴파일한 프로그램의 경우 abort 함수가 실행되면 동일하게 종료되지만 몇 가지 차이점이 존재한다. (vs의 기본 signal handler가 있는것으로 추측)

 

그 중 대표적인것으로는 VS의 Debug로 빌드된 프로그램의 경우 abort 함수 실행시 중단[Abort], 다시 시도[Retry], 무시[Ignore] 메시지 박스가 생성된다.

 

중단[Abort]을 선택하면 프로그램이 즉시 종료되고 종료 코드 3이 반환되며, 다시 시도[Retry]를 선택하면 디버거가 호출된다.(디버거를 사용 가능한 경우에만 호출된다.)

 

종료시 제어권 또는 운영체제나 부모 프로세스에게 반환하는 값들도 있으나 상세한 내용은 포스팅 주제와 벗어나기 때문에 생략한다.

 

Windows 에서 abort에 대한 자세한 정보를 확인하려면 아래 msdn 페이지를 확인하면 된다.

https://learn.microsoft.com/en-us/previous-versions/k089yyh0(v=vs.140) 

 

abort

Table of contents abort Article 06/05/2017 3 minutes to read In this article --> The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com. The latest version of this topic can be found at abort. Aborts the curr

learn.microsoft.com

 


 

<소스 코드>

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

int main() {
    char *nullptr = NULL;

    if(nullptr == NULL) {
        printf("Is NULL Pointer!\n");
        abort();
    }
    else {
        memcpy(nullptr, "Hello NULL", strlen("Hello NULL"));
    }

    return 0;
}

 

※ 실행 결과

Is NULL Pointer!

Process finished with exit code 3

 

※ VS2015 (Debug) 컴파일의 경우

MessageBox 가 생성된다.

 

반응형