레이블이 gdb인 게시물을 표시합니다. 모든 게시물 표시
레이블이 gdb인 게시물을 표시합니다. 모든 게시물 표시

2010년 7월 7일 수요일

msvc 디버깅 커맨드 윈도우

http://msdn.microsoft.com/en-us/library/c785s0kz.aspx

간단히 말해서 gdb 에서 call fun() 을 하려면 visual studio 에서는 ? fun() 하면 된다.
visual studio 는 거의 안써서 매번 까먹음ㅋ

2009년 10월 9일 금요일

2008년 11월 12일 수요일

GDB 텍스트 유저 인터페이스 gdbtui




http://sourceware.org/gdb/current/onlinedocs/gdb_24.html

보통 디버깅시 emacs 상에서 gud 물려서 하지만 간단한 디버깅을 할때는 그냥 콘솔에서 gdb 를 띄우는데 이때 list 로 소스보는건 짜증나는 일이니 gdbtui 를 좀더 활용해보자...

  • gdb 때리는 버릇때문에 -tui 옵션을 주거나 gdbtui 로 띄울일은 없고.. 그냥 gdb 로 띄우고 적당히 디버깅하다가 소스뷰가 필요하면 C-X a 로 tui 모드로 전환하자. 필요없을경우 다시 C-X a 로 원래 모드로 돌아갈수도 있다.
  • 음 사실 내가 쓰는건 이게 전부.. 내가 어셈코드나 레지스터를 볼 이유도 없고..  소스뷰 하나 보이는 레이아웃이면 충분하다.
  • 혹시나 다른 레이아웃을 쓴다면 이맥스 단축키와 유사하니 외울것도 없고..
  • 손가락에 단축키 외울 용량이 남으면 싱글키 모드는 한번 써보고 싶은데 이거 쓰느니 그냥 emacs 에서 gud 띄우자. 정 필요하면 단축키 바꾸는 방법을 찾아보고..
  • 한글지원(주석에 한글등이 포함된 경우)이 어색하고.. 이것때문인지(?) 가끔 화면이 깨진다. 상당히 짜증나서 gdbtui 를 잘 안쓰게 되는 원인.

2008년 7월 2일 수요일

emacs + gdb 편하게 디버깅하기

이전에 적었던 글
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/DebuggingWithEmacs
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/using_GDB
새 위키에 적기전에 잠시 정리. emacs 와 gdb 로 디버깅하기 란 페이지에 정리할 생각.

emacs 에서 gdb 를 visual studio 와 유사한 키바인딩으로 사용하기

(global-set-key [f9] 'gud-break)        ; 소스창에서 바로 브레이크포인트 설정
(global-set-key [f10] 'gud-next) ; 현재 라인 실행하고 다음 라인으로
(global-set-key [f11] 'gud-step) ; 현재 함수안으로 따라 들어간다
(global-set-key [(shift f11)] 'gud-finish) ; 현재 실행중인 함수 리턴후 멈춤
(global-set-key [(shift f10)] '(lambda () ; 현재 커서까지 실행하고 멈춤
(interactive)
(call-interactively 'gud-tbreak)
(call-interactively 'gud-cont)))

흠 recenter-top-bottom 을 매번 불러서 커서를 화면 중앙으로 유지하는 것도 편할거 같은데 아직 시도는 안해봤다. 지금도 그렇게 불편하진 않다..


아래 스샷처럼 여러 윈도 같이 띄우기
사용자 삽입 이미지

(setq gdb-many-windows t)

내가 원하는 윈도를 따로 프레임으로 띄우기
내 모니터가 작아서 저렇게 놓고 디버깅하긴 좀 불편하다. 자주 쓰는 gdb 콘솔윈도우는 따로 프레임으로 뽑아내서 아래 그림처럼 alt-tab 으로 전환해가면서 사용하는게 더 편하다.
사용자 삽입 이미지

조렇게 쓰려면 위쪽 gdb 창에가서 C-x 5 2 를 누르거나 아니면 GUD 메뉴를 써먹자.
따로 뜬 프레임만 닫을때는 C-x 5 0

간단한 .gdbinit 사용
정말 최소한의 것만 적자면
  1. pretty print 켜주고,
  2. emacs 상에서 M-x gdb 로 gdb 띄울때 매번 arg 세팅을 피하기 위해서 set args 해주고
  3. 몇몇 중요한 함수들 브레이크를 미리 잡아둔다.
정도... 예를들어 .gdbinit 을 요런식으로 만들어주자.
set print pretty on
set args -B 200 --frames 5 -o /tmp/output.264 /tmp/foreman_352x288_30fps_449.yuv 352x288
b x264_me_search_ref

어떤 타입의 정보를 자주 살펴봐야 할때
gdb 의 print 명령이 꽤나 좋지만 아주 복잡한 구조체가 있고 그중 일부 멤버만 디버깅에 필요하다면 매번 print 하는건 상당히 귀찮다. 아래에 언급한 STL 디버깅 스크립트 처럼 gdbinit 안에 적당한 디버깅용 함수를 만들어서 이걸 이용하는 방법도 있지만 대부분의 경우 가능하면 소스안에 포함하는게 좋다고 본다.( 물론 STL 은 내부구현이 가려져 있으니 소스내에서 뽑는건 오히려 좋지 않겠지, msvc 도 유사한 기능이 있을테니 이런건 디버거 레벨에서 처리하는게 맞을듯) 예를들어 아래 같은 코드가 있으면
사용자 삽입 이미지

디버깅시 int 값이 필요할때마다 gdb 상에서 call dump_int(foo) 를 통해서 값을 출력해볼수 있다.

사용자 삽입 이미지




좀더..