gdb 사용
실행중이 process 디버깅
gdb [program] [PID]
#gdb
(gdb)attach [PID]
프로세스 연결 해제
(gdb) detach
Core dump file 이용한 디버깅
gdb [실행파일] [core dump 파일명]
build 시 -g 0O option을 준다.
시작은…
gdb a.out 으로 gdb환경으로 들어간다.
run : a.out을 실행한다.
list(l) : source code를 보여준다.
break (b) : 특정 라인이나 함수에 break를 건다.
where : break 걸린 이후 stack을 보여준다.
where full : 지역변수까지 표시해줌
s : break 걸린후에 step 그러니까 한라인씩 실행시킨다.
backtrace (bt) : 현재 call stack을 보여준다.
frame 3 한다면… bt로 봤던 여러 스택중, 3번 스택으로 이동하게 되겠다.
up 한다면… 한단계 상위 스택 프레임으로 이동
down 한다면… 한단계 하위 스택 프레임으로 이동 한다.
info locals : 현재 상태에서의 지역변수 출력
info variables : 현재 상태에서의 전역변수 리스트 출력
info frame : 현재 상태의 stack 정보를 보여준다.
p (printf) : 개별 변수 출력
display i : 변수 i값을 보여준다.
[펌]http://psyoblade.egloos.com/2653919 (이글루스 블로그, 서버 종료)
-
우선 컴파일 시에 디버깅 정보를 담아야 한다.
gcc -g -o [프로그램명] [소스파일명]
디버깅 옵션인 -g 으로 컴파일하며, 최적화 옵션인 -O 은 주지 않도록 한다. -
실행방법
gdb [프로그램명]
gdb [프로그램명] [core파일명] -
종료방법
q
Ctrl + d -
소스 찾아가기 (list)
l : main 함수를 기점으로 소스의 내용이 출력된다
l 10 : 10 행 주변의 소스가 출력되는데 10 - 5 행부터 10 + 5행까지 총 10행이 출려된다.
l func : func 함수의 소스를 출력
l -5 : 기본값으로 10줄이 출력된다고 가정하고, 다음에 출력될 라인이 11라인이라면, 10(마지막라인) - 5 라인을 중심으로 출력된다. 즉, 그대로 1~10라인이 출력된다.
l a.c:func : a.c 파일의 func 함수부분을 출력
l a.c:10 : a.c 파일의 10행을 기준으로 출력 -
옵션
set listsize 20 : 한번에 출력하는 행의 갯수를 20개로 늘린다.
Enter : 마지막으로 수행한 명령어를 다시 수행한다 -
프로그램 실행, 종료 (run, kill)
r : 프로그램 수행 (재시작)
r arg1 arg2 : arg1과 arg2를 인자로 프로그램 수행
k : 프로그램 수행종료 -
역추적하기 (backtrace)
bt : 오류가 발생한 함수를 역으로 찾아간다. -
중단점 사용하기 (breakpoint, temporary breakpoint)\
http://blog.daum.net/aswip/8429607
GDB 사용법 정리 잘된 싸이트
GDB를 이용한 디버깅 : http://coffeenix.net/doc/develop/gdb.html
GDB 잘쓰기 : http://kldp.org/node/71806
http://kldp.org/node/87778
gdb) http://www.gnu.org/software/gdb/gdb.html
gdb로 디버깅) http://www.sourceware.org/gdb/current/onlinedocs/gdb.html#SEC_Top
ddd) https://www.gnu.org/software/ddd/
인사이트) https://sourceware.org/insight/
\