본문 바로가기

리눅스

ABRT(Automatic Bug Reporting Tool) 시스템에서 문제를 감지

728x90

ABRT(Automatic Bug Reporting Tool) 시스템에서 문제를 감지

$ sudo su -
마지막 로그인: 목  3월 23 15:08:29 KST 2023 일시 pts/2
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1679551709

ABRT(Automatic Bug Reporting Tool)가 시스템에서 하나 이상의 문제를 감지했습니다. 자세한 정보를 얻으려면 터미널에서 다음 명령을 실행할 수 있습니다

abrt-cli list --since 1679551709

이 명령은 ABRT가 지정된 타임스탬프(1679551709) 이후로 감지한 모든 문제 목록을 보여줍니다. 거기서 각 문제를 자세히 조사하고 해결할 적절한 조치를 취할 수 있습니다.

$ abrt-cli list --since 1679551709
id e06f6433b023c113e6e4b04fead13ab32204c48c
reason:         siege killed by SIGSEGV
time:           2023년 03월 23일 (목) 오후 04시 45분 41초
cmdline:        siege -c 650 -r 1 https://sangchul.kr
package:        siege-4.1.1-1.el7
uid:            0 (root)
count:          1
Directory:      /var/spool/abrt/ccpp-2023-03-23-16:45:41-29938

자동보고 기능은 비활성화되어 있습니다. root 권한을 가진 사용자로
'abrt-auto-reporting enabled'를 실행하여 이를 활성화합니다

ABRT 보고서 파일들에 대한 설명

  • abrt_version: ABRT 버전 정보가 저장된 파일입니다.
  • analyzer: 문제 분석 도구의 이름이 저장된 파일입니다.
  • architecture: 시스템 아키텍처 정보가 저장된 파일입니다.
  • cgroup: 문제가 발생한 프로세스의 CGroup 정보가 저장된 파일입니다.
  • cmdline: 문제가 발생한 프로세스의 명령줄 인수 정보가 저장된 파일입니다.
  • core_backtrace: ABRT가 생성한 코어 덤프에서 추출된 백트레이스 정보가 저장된 파일입니다.
  • coredump: 문제가 발생한 프로세스의 코어 덤프 파일입니다.
  • count: 해당 문제가 발생한 횟수가 저장된 파일입니다.
  • dso_list: 문제가 발생한 프로세스와 관련된 공유 라이브러리 정보가 저장된 파일입니다.
  • environ: 문제가 발생한 프로세스의 환경 변수 정보가 저장된 파일입니다.
  • event_log: ABRT 이벤트 로그 파일입니다. 이 파일은 현재 비어있는 것으로 보입니다.
  • executable: 문제가 발생한 실행 파일의 경로가 저장된 파일입니다.
  • global_pid: 문제가 발생한 프로세스의 전역 PID가 저장된 파일입니다.
  • hostname: 시스템의 호스트명이 저장된 파일입니다.
  • kernel: 사용 중인 커널 버전 정보가 저장된 파일입니다.
  • last_occurrence: 최근 문제 발생 시간이 저장된 파일입니다.
  • limits: 문제가 발생한 프로세스의 리소스 제한 정보가 저장된 파일입니다.
  • machineid: 시스템의 머신 ID가 저장된 파일입니다.
  • maps: 문제가 발생한 프로세스의 메모리 매핑 정보가 저장된 파일입니다.
  • open_fds: 문제가 발생한 프로세스의 열린 파일 디스크립터 정보가 저장된 파일입니다.
  • os_info: 운영 체제 정보가 저장된 파일입니다.
  • os_release: 운영 체제 릴리스 정보가 저장된 파일입니다.
  • pid: 문제가 발생한 프로세스의 PID가 저장된 파일입니다.
  • proc_pid_status: 문제가 발생한 프로세스의 상태 정보가 저장된 파일입니다.
  • pwd: 문제가 발생한 프로세스의 현재 작업 디렉터리 정보가 저장된 파일입니다.
  • reason: 문제 발생 원인에 대한 설명이 저장된 파일입니다.
  • runlevel: 시스템의 실행 레벨 정보가 저장된 파일입니다.
  • time: 문제가 발생한 시간이 저장된 파일입니다.
  • type: 문제의 유형 정보가 저장된 파일입니다.
  • uid: 문제가 발생한 프로세스의 사용자 ID가 저장된 파일입니다.
  • username: 문제가 발생한 프로세스의 사용자 이름이 저장된 파일입니다.
  • uuid: 보고서의 고유 식별자(UUID)가 저장된 파일입니다.
  • var_log_messages: 시스템의 로그 파일인 /var/log/messages의 내용이 저장된 파일입니다.

coredump 파일을 확인하는 방법

1. coredump 파일이 있는 경로로 이동합니다. 여기서는 /var/spool/abrt/ccpp-2023-03-23-16:45:41-29938 가 있다고 가정합니다.

cd /var/spool/abrt/ccpp-2023-03-23-16:45:41-29938

 

2. 해당 경로에서 "ls" 명령을 사용하여 coredump 파일을 확인합니다. coredump 파일은 보통 "coredump" 또는 "core" 라는 이름을 가지고 있습니다.

ls -l coredump
728x90

 

3. coredump 파일이 존재하는 경우, gdb (GNU Debugger)를 사용하여 파일을 분석합니다.

gdb -c coredump
$ gdb -c coredump
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
[New LWP 30590]
[New LWP 30400]
[New LWP 29938]
Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*debug*' install /usr/lib/debug/.build-id/d9/5dcb75d353394ff06e3ee838d1b03592240864
Core was generated by `siege -c 650 -r 1 https://sangchul.kr'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f1dd40feb81 in ?? ()

 

4. gdb를 실행하면, "bt" 명령을 사용하여 backtrace를 확인할 수 있습니다. backtrace는 프로그램이 죽기 전까지 실행한 함수 호출 스택을 나타내며, 문제점을 파악하는 데 도움이 됩니다.

bt
(gdb) bt
#0  0x00007f1dd40feb81 in ?? ()
#1  0x0000000000000008 in ?? ()
#2  0x000000000040c4a9 in ?? ()
#3  0x0000000000e71170 in ?? ()
#4  0x0000000000000000 in ?? ()

위의 과정을 따르면, ABRT에서 생성된 coredump 파일을 확인하고 문제를 분석할 수 있습니다.

 

5. gdb에서는 다른 명령어들도 사용할 수 있습니다. 예를 들어, "info registers" 명령을 사용하여 레지스터 정보를 확인할 수 있습니다.

info registers
(gdb) info registers
rax            0xed1e00 15539712
rbx            0x8      8
rcx            0x1c     28
rdx            0x1c     28
rsi            0x1      1
rdi            0x7f1dd1e10700   139766051964672
rbp            0xe71170 0xe71170
rsp            0x7f1c8cb85d40   0x7f1c8cb85d40
r8             0x7f1dd35fe9f0   139766077057520
r9             0x1      1
r10            0x7f1c8cb85910   139760596703504
r11            0x7f1dd40feb80   139766088592256
r12            0x1450   5200
r13            0x801000 8392704
r14            0x0      0
r15            0x7f1c8cb86700   139760596707072
rip            0x7f1dd40feb81   0x7f1dd40feb81
eflags         0x10206  [ PF IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

 

6. 문제를 해결하기 위해서는, coredump 파일의 정보를 분석하여 어떤 문제가 발생했는지 파악해야 합니다. 이를 위해서는 해당 프로그램의 소스코드와 디버그 정보를 함께 분석하는 것이 좋습니다.

 

7. 만약 ABRT가 coredump 파일을 수집하지 않았다면, 직접 coredump 파일을 수집해야 합니다. 이를 위해서는, "ulimit -c unlimited" 명령을 사용하여 coredump 파일 생성을 허용하도록 설정해야 합니다. 이후에, 프로그램이 죽게되면, coredump 파일이 생성되며, 이를 gdb를 사용하여 분석할 수 있습니다.

 

위의 과정을 참고하여, coredump 파일을 분석하고 문제를 해결할 수 있습니다.

 

728x90