리눅스 코어 덤프(coredump)란? 디버깅
- 운영체제(OS)
- 2023. 8. 5.
코어 덤프란?
코어 덤프는 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태와 레지스터 값, 스택 트레이스 등의 정보를 담고 있는 파일입니다. 어떤 이유로 프로그램이 죽었는지 디버깅할 때 활용됩니다. 코어덤프는 바이너리로 저장되지만 GDB 같은 디버거로 덤프 파일의 내용을 읽을 수 있습니다.
코어 덤프 생성 예시
리눅스에서 임의로 코어 덤프가 떨어지는 소스 코드를 컴파일하고 실행하여 확인해 보겠습니다.
우선 코어 덤프 파일이 생성되도록 터미널에서 아래의 명령어를 실행합니다. 이 명령은 현재 셸에 대해 코어 덤프 파일 크기의 제한을 해제합니다.
[root@localhost coredump]# ulimit -c unlimited
NULL 포인터를 참조하려고 시도하여 Segmentation Fault를 유발하는 아래의 C 소스 코드를 coreTest.c라는 파일명으로 저장하겠습니다.
#include <stdio.h>
int main(void) {
int *p = NULL;
*p = 10;
return 0;
}
[root@localhost coredump]# ll
total 4
-rwxr-xr-x. 1 root root 86 Aug 5 09:59 coreTest.c
gcc를 사용하여 소스를 컴파일합니다. coreTest로 실행 파일을 만들었습니다.
[root@localhost coredump]# gcc -o coreTest coreTest.c
[root@localhost coredump]# ll
total 16
-rwxr-xr-x. 1 root root 8352 Aug 5 10:04 coreTest
-rwxr-xr-x. 1 root root 86 Aug 5 09:59 coreTest.c
coreTest를 실행하면 Segmentation fault 오류와 함께 코어 덤프가 떨어졌다는 메시지가 나옵니다.
[root@localhost coredump]# ./coreTest
Segmentation fault (core dumped)
코어 덤프는 core.* 형태의 파일명으로 저장됩니다. 다만 이 파일은 바이너리 파일이라 일반 편집기로는 읽을 수가 없습니다.
[root@localhost coredump]# ls
core.21523 coreTest coreTest.c
GDB(GNU Debugger)와 같은 디버거를 사용하면 코어 덤프 파일의 내용을 읽을 수 있습니다.
[root@localhost coredump]# gdb coreTest core.21523
출력된 GDB 메시지를 보면 coreTest가 Segmentation fault로 인해 종료되었고 이로 인해 core.21523 코어 덤프 파일이 생성됐습니다. 이유는 잘못된 메모리 참조이고 중단된 위치는 #0 0x00000000004004fd in main () 입니다. main() 함수에서 중단된 걸 알 수 있습니다.
'운영체제(OS)' 카테고리의 다른 글
리눅스 systemctl 등록된 서비스 이름 확인하는 방법 (0) | 2023.08.24 |
---|---|
윈도우 인스톨러 (Windows Installer)란? (0) | 2023.08.07 |
운영체제(OS) 별 파일 시스템 종류 (0) | 2023.07.30 |
spy++ 윈도우 클래스명 확인하는 방법 (0) | 2023.07.29 |
컴퓨터 화면에서 윈도우(Window)란? (0) | 2023.07.29 |