gdb 디버거 사용법
프로그램 안을 뜯어보고 싶을 때
공부하다가 분명 프로그램이 잘돌아가야하는데 이상하게 안돌아갈 때가 있고
가끔 (이아니고 자주) segmenatation fault가 뜰 때가 있다.
근데 gcc는 아주 불친절하게 어디서 seg fault가 났는지 안알려주고 걍 멈춰버린다.
그러면 프로그램 안을 해부해서 직접 눈으로 보고싶어지는데 이럴때 사용하는게 디버거.
여러 디버거중 하나가 gdb이다.
리눅스에서 sudo apt-get install gdb
하면 쉽게 설치할수 있다.
gcc와 함께 사용한다.
사용 방법
1. 컴파일할때 gdb를 위한 옵션 넣어주기
gcc -g -o test.exe test.c
gcc로 컴파일 할 때 -g 옵션을 같이 넣어준다.
2. gdb 실행
gdb test.exe
생성한 실행 파일 이름으로 gdb를 실행한다.
만약 seg fault가 어디서 났는지 알고싶으면 gdb test.exe core
를 실행한다.
-g옵션을 넣어서 생성한 실행파일이 SEG FAULT가 나면 core 파일을 자동으로 생성해주는데
생성이 안되는경우도 있다.
그럼 ulimit -c unlimited
를 실행해 보자
이건 ubuntu에서만 되는거 같으니까 다른 환경이면 검색해 봐야됨.
어쨋든 잘 실행했으면 다음과 같은 모습
3. break point 설정하기
break point를 설정해주지 않으면 지맘대로 끝까지 실행해버린다.
그럼 프로그램 내부를 뜯어볼 시간도 없기 때문에 멈춰줄 지점을 설정해 줘야한다.
(gdb)b 50
test.c 파일의 50번째 줄에서 멈추라는 의미이다.
만약 소스 파일이 여러개였다면
1
(gdb)b test.cpp:50
원하는 파일을 지정해줄수도 있다.
4. 실행
(gdb) run
설정한 break point까지 실행한다.
5. 실행하며 넘기기
(gdb) step
step말고 next도 있는데 차이점을 알아봐야겠다.
6. 변수값 찍어보기
(gdb) print a
a라는 변수에 저장된 값을 출력해준다.
자주 쓰는 gdb 명령어 정리
(gdb) list
지금 위치에서 위아래 10줄을 출력해준다.(gdb) continue
break point까지 쭉 실행. 없으면 끝까지 실행해버림.
결론
- step과 next의 차이 알아보기
- 커맨드라인에서 실행하는 것이라 불편하긴 하지만 이거 말고도 기능이 아주 많기 때문에 공부해서 익숙해지면 좋을것 같다.
댓글남기기