유닉스/리눅스 프로그래밍 필수 유틸리티에서 GDB 부분만을 요약한 내용입니다.
gdb늅인 저에게 gdb 더 고급 테크닉이 있으면 알려주시면 감사하겠습니다. :)
gdb sample
![]() 화면 캡처: 2009-07-23, AM 12:30 |
breakpoint걸고 run!
bp 시 b if var == ? 와 같은 형식으로 조건식 브레이크가 가능하다.

화면 캡처: 2009-07-23, AM 12:32
걸린 부분에 대한 코드 확인 및 레지스터 확인.

화면 캡처: 2009-07-23, AM 12:32
전역변수 및 지역변수 값 확인

화면 캡처: 2009-07-23, AM 12:33
p명령어를 이용할 시 포인터나 레지스터의 값을 확인할 수 있다.
또한 x/[범위][출력형식][단위] 를 통해 해당 메모리영역의 값을 볼 수도 있다.
출력형식을 i로 하는 경우 어셈블리어, s인 경우 문자열로 볼 수 있다.

화면 캡처: 2009-07-23, AM 12:50
만약 @N을 붙인다면 여러구조체의 정보를 한번에 볼 수 있다.

화면 캡처: 2009-07-23, AM 12:34
watch명령은 하나의 변수 값이 바뀔 때마 해당 값을 출력해준다.
s(step), n(next), u(until), finish, return, c(continue)도 있음.
해당 코드의 문제점을 스택백트레이스를 통해 알아보자. 세그멘테이션 폴트가 발생할 시 발생 프레임에 대한 정보를 통한 분석이다.

화면 캡처: 2009-07-23, AM 12:46
계속 따라가다 보면...

화면 캡처: 2009-07-23, AM 12:46
위와 같이 137의 표준 C함수인 printf문이 나오게 되고, 그 아래 사용자가 생성한 main함수가 위치하게 된다. 사용자 생성 함수인 main함수에 대한 stack frame를 설정하고 변수들을 확인해보면,

화면 캡처: 2009-07-23, AM 12:47
위 그림과 같이 i값이 5가 되면서 오버플로우가 발생하는 것을 확인할 수 있다.
마지막으로 set명령어를 이용하면 해당 메모리나 변수에 값을 재설정할 수 있다.




최근 덧글