본문 바로가기

IT Tech/Programming

[C언어] c/c++ gcc 디버깅을 위한 gdb 초간단 사용팁

반응형





1. gdb 사용을 위한 core 덤프 파일을 위한 준비작업

1.1 디버깅 정보를 포함하기 위해 gcc 컴파일 옵션의 CFLAGS 에 -g 옵션을 추가한다.
ex)
CFLAGS  += -Werror -Wlong-long -Wno-pointer-sign
g


1.2 core 파일의 크기를 설정한다. 보통은 무한대로 설정하면 편하다.

ulimit c unlimited
# ulimit -a 로 확인


1.3 core 덤프파일의 확장자로 pid 값을 달게 하기 위한 추가 작업 (option)
sysctl -w kernel.core_uses_pid=1
# sysctl -a 로 확인


[주의]
2, 3의 항복은 쉘의 세션마다 적용이 된다.
부팅과정의 세션과 prompt가 뜨고 root 로 로그인 후의 세션은 다르다.




2. 초 간단 GDB 사용법

2.1 실행

# gdb "<process> <process input parameter>" -c core.pid


2.2 BackTrace
gdb) bt
#0 ...
#1 ...
#2 ...
#0, #1, #2 는 스택 프레임을 나타냄


2.3 stack frame 이동
gdb) frame 2   // #2의 프레임으로 이동
일반적으로 segmentation fault 는 표준 입출력 에러에서 발생하는 경우가 많아 #0, #1 의 경우 표준 라이브러리 형태가 많다.


4. frame 의 소스 출력
gdb) list

해당 프레임의 소스를 출력해서 죽은 포인트를 확인한다.





+





반응형