2011년 2월 11일 금요일

GDB 간단한 사용 방법

gdb를 이용하여 프로그램을 이용한 디버깅 방법을 간략히 설명한다.




1. gdb를 이용, 디버깅 하기 위해서는 gcc 옵션 -g를 지정하여 컴파일 한다.

ex> gcc -g -o debug1 debug1.c



2. 컴파일된 바이너리 파일이 있는 곳에서 gdb [바이너리파일명] 입력하여 gdb 실행한다.

ex> gdb debug1



3. gdb 명령어 'run'으로 컴파일된 프로그램을 실행한다.

(gdb) run



4. debug1 프로그램 실행 시 segmentation fault가 발생하였다면 발생시점에서 run은 중지된다.



5. segmentation fault 발생시점에서 backtrace 또는 bt 명령어를 입력하면 오류 발생 직전 사용된 코드를 확인할 수 있다.

(gdb) bt



6. segmentation fault 는 발생하지 않지만 프로그램이 원하는 의도하지 않은 결과를 출력할 경우, breakpoint를 지정하여 단계별 실행 및 변수에 담긴 값을 확인 할 수 있다.

'break' 명령어와 line_number 또는 function_name을 입력한다.

(gdb) break 21 또는

(gdb) break sort



7. breakpoint 지정 후 'run'을 이용 프로그램을 실행하면 breakpoint가 설정된 위치에서 프로그램의 실행이 멈준다. 이 후 'next' 명령어를 이용 한단계씩 프로그램을 진행시킬 수 있다.

(gdb) next



8. Loop에 breakpoint 를 지정한 상황에서 'next' 명령어를 이용하여 다음 Loop까지 가는것이 힘들다면 'cont' 명령어를 이용하여 다음 breakpoint까지 단숨에 이동한다.

(gdb) cont



9. 'next' 명령어를 이용 단계별 실행 도중 변수에 담긴 값이 궁금하다면 'print'명령어를 이용하여 확인할 수 있다.

(gdb) print tmp



10. 'print' 명령어를 이용하여 배열에 담긴 값도 확인이 가능하다. 배열에 담긴 값 여러개를 한꺼번에 확인하고 싶다면 '@'을 이용한다. 다음 예는 'array'배열에 담긴 값 5개를 보여준다.

(gdb) print array[0]@5



11. 'print' 명령어를 매번 입력하기 힘들지만 매번 확인해야 한다면 'display'명령어를 이용한다. 'display'를 입력할 경우 해당 변수의 값을 매번 출력해준다.

(gdb) display array[0]@5



12. 현재 디버깅 하고 있는 위치 주변의 소스코드가 궁금하다면 'list' 명령어를 이용하여 확인이 가능하다. 'list' 명령어를 한번 더 입력하면 더 많은 내용을 보여준다.

(gdb) list

댓글 없음:

댓글 쓰기