IT Tech/Programming
[C언어] c/c++ gcc 디버깅을 위한 gdb 초간단 사용팁
MindEater™
2012. 3. 10. 10:01
반응형
1. gdb 사용을 위한 core 덤프 파일을 위한 준비작업
1.1 디버깅 정보를 포함하기 위해 gcc 컴파일 옵션의 CFLAGS 에 -g 옵션을 추가한다.
1.3 core 덤프파일의 확장자로 pid 값을 달게 하기 위한 추가 작업 (option)
2.2 BackTrace
2.3 stack frame 이동
4. frame 의 소스 출력
1.1 디버깅 정보를 포함하기 위해 gcc 컴파일 옵션의 CFLAGS 에 -g 옵션을 추가한다.
ex)
CFLAGS += -Werror -Wlong-long -Wno-pointer-sign –g
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 는 스택 프레임을 나타냄#0 ...
#1 ...
#2 ...
2.3 stack frame 이동
gdb) frame 2 // #2의 프레임으로 이동
일반적으로 segmentation fault 는 표준 입출력 에러에서 발생하는 경우가 많아 #0, #1 의 경우 표준 라이브러리 형태가 많다. 4. frame 의 소스 출력
gdb) list
해당 프레임의 소스를 출력해서 죽은 포인트를 확인한다.
+
반응형