본문 바로가기

서버 관리/리눅스

리눅스 크래시 로그 파악하기

[1. 개요]

프로그램이 비정상 종료하게 되어 dmesg 를 체크 한 경우,

비정상 종료한 프로그램에서 crash 난 위치를 대강 파악할 수 있다.

 

보통 그 크래시 로그는 아래와 같은 형태이다.

  • segfault at 1d ip 00000...508b30 sp 00007f93474f19838 error 4 in MyApp[400000+33f000]

# at 다음에는 주소 값 (0 인 경우는 NULL 포인터를 접근 한 경우라 볼 수 있다.)

# ip 는 instruction pointer 로 실제 진행 한 명령어의 주소 값 (이 명령어, 코드가 충돌 지점이다)

# error 는 오류 코드

# sp 는 stack pointer 로 아직 써본 경우는 없음.

# MyApp ~ 는 base_address + offset 으로 구성
-> MyApp 바이너리가 0x400000 베이스 주소에서 로드되고, 그 offset 은 33f000 바이트 지점.

-> 실제 주소는 0x400000 + 0x33f000 을 접근하려다가 크래시 발생

-> 0x400000 ~ (0x400000 + 0x33f000)

-> ip 가 위 범위를 벗어난다면, 다른 라이브러리에서 발생 한 문제일 수 있다.

-> 다른 라이브러이의 base_address 를 확인 할 필요 있다. 

 

offset  = ip - base

= 0x508b30 - 0x400000 

= 0x108b30

 

$ addr2line -e MyApp 0x108b30 -f -C 

$ addr2line -e MyApp.debug 0x508b30 -f -C

 

 

 

'서버 관리 > 리눅스' 카테고리의 다른 글

service 파일  (0) 2025.09.02
update-alternatives  (0) 2025.08.30
ulimit  (0) 2025.07.03
리눅스 패키지 관리  (0) 2025.05.01
samba 서버 설치  (0) 2025.05.01