Linux segmentation fault (core dumped) 시 gdb 로 디버깅하기

# 프로그램 런타임시 세그멘테이션 오류가 날경우 core.xxxx 파일로 덤프되어 디버깅할 수 있다.
segmentation fault (core dumped)

# 만약 core.xxx 파일이 보이지 않을때 다음과 같이 ulimite 로 core block 사이즈를 지정한다.
ulimit -c 10000

# 프로그램을 다시 실행하면 segmentation fault (core dumped) 메시지와 함께 core 파일이 생성된다.
# 다음과 같이 gdb 에 생성된 코어파일과 프로그램을 인자로 주어 실행한다.
gdb -c=core.1234 ./testprogram


### 자주 사용된는 명령들 ###
# bt(backtrace) 또는 where 로 segmentation fault 가 발생 부분 이전까지의 순서(콜스택)을 파악
(gdb) bt

# 콜 스택에서 이전 수행 위치로
(gdb) up

# 콜 스택에서 다음 수행 위치로
(gdb) down

# 콜 스택에서 프레임으로 이동
(gdb) frame 프레임번호
# 또는
(gdb) f 프레임번호

# 현재 프레임에서 소스 보기
(gdb) list
# 또는
(gdb) l

# 소스코드 9번째 줄 브레이크포인트
(gdb) b 9

# 소스코드 브레이크포인트까지 실행
(gdb) r

# 현재 프레임에서 변수 내용 출력
# optimized out 으로 나오면 빌드시 최적화 옵션으로 값이 저장되지 않은 경우다.
# 빌드시 최적화하지 않음(-O0) 옵션을 주면 볼 수 있다.
(gdb) print 변수명
# 또는
(gdb) p 변수명

# 현재 프레임에서 지역 변수 출력
(gdb) info locals

# 모든 전역 변수 확인
(gdb) info variables

# 종료
(gdb) quit

# 도움말
(gdb) help all

# 특정 명령어 도움말
(gdb) help 명령어

comments:

댓글 쓰기