티스토리 뷰

개발/Linux

(CentOS) 데몬의 coredump 얻기

Jaeyeon Baek 2017.04.17 15:49

Linux에서 Application을 개발하다 보면 가장 힘든 것이 데몬이 "어쩌다가" 죽는 경우이다. 죽는 빈도가 잦거나 특정 상황이 유추되면 그나마 괜찮은데, 짧게는 일주일, 길게는 한달에 한번 죽는다면 디버깅 하기도 힘들고 관련 정보를 얻는 것도 녹록치 않다.


이때 유용하게 사용할 수 있는 것이 CentOS 6 이상에서 기본 제공되는 abrt를 이용하는 것이겠다. (CentOS 5 이하는 아래 내용이 포함되어 있지 않다.) 우선 이 기능은 프로그램 상에 올라가는 데몬이 죽게되면 coredump를 파일로 남기는 것이고, 후에 이 coredumpgdb에서 활용해서 bracktrace 등 다양하게 디버깅이 가능하겠다.


기능을 활성화하는 방법은 아래와 같다.


1. /etc/abrt/abrt-action-save-package-data.conf 파일을 편집모드로 열고,

2. ProcessUnpackaged = no 부분을 yes로 변경


설정이 무척 간단하게 끝났다. 이제 Application에 문제(died)가 생기게 되면 관련 coredump가 아래와 같은 경로에 생기게 된다.

/var/spool/abrt/ccpp-2016-06-13-09:44:44-19185/coredump  (19185는 process id)


coredump 파일은 바이너리기 때문에 열람해서 봐도 알 수 없는 문자로 가득하다. 의미있게 활용하기 위해서는 gdb가 필수로 필요하기 때문에 설치되어 있지 않다면 gdb를 설치하도록 하자.

$ yum install gdb


gdb를 이용해서 파일을 여는 방법은 아래와 같다. 

$# gdb [공백] 실행파일이름 [공백] coredump파일
$ gdb  /user/bin/tes /var/spool/abrt/ccpp-2016-06-13-09:44:44-19185/coredump


위 명령어를 입력하면 gdb 프롬프트로 진입되는데 여기서 bt 등 다양한 명령어를 통해 디버깅을 수행하면 되겠다. 


abrt는 상당히 매력적이고 강력한 기능이지만 coredump 파일은 데몬이 죽을 때 마다 생성이 되고, 그 사이즈가 임베디드 보드에서는 무시할 수 없는 수준(수백 KiB)이니 상황에 맞게 적절히 사용하도록 하자.

댓글
댓글쓰기 폼