cygwin

윈도우에서 DDD 설치와 사용

ForceCore 2008. 10. 12. 14:14

gdb는 너무 어렵다 큭... (?? 사실 자주 사용되는 것 몇 개 익히면 별로 안 어렵다 ㅡ,.ㅡ)
하지만 gdb에게도 그래피컬 front end가 있으니...
윈도우에서는 dev-c++이 gbd의 front end 역할을 한다.
리눅스에도 물론 존재하고, 그 중에서도 특이해서 필자의 관심을 잡은 것이 DDD이다.
위 스크린샷을 보면 알겠지만 자료구조가... 그래픽적으로 나온다 ㅠㅠ
포인터가 화살표로, 자기 자신을 향한 포인터 조차도 표시되고...

하지만, 필자는 DDD를 윈도우에서 쓰기로 했다.
서버는 보통 이런 디버깅툴이 제공되지 않는 경우가 많아서...

cygwin의 설치 패키지 목록을 보면 devel에 DDD가 제공된다. 오옷.

$ ddd

를 해보면 Can't open display라고 한다.
그렇다. 그래픽적 디버깅 툴이니까, 당연하다.

Xming을 깔았다.
그리고 실행 시켜주면 된다.
X launch는 쓰지 않아도 된다. 단지, 실행 상태로 만들어서,
트레이에 X자 아이콘이 생기고, Xming Server:0.0
이렇게 벌룬 툴팁이 뜨면 된다.

$ export DISPLAY=localhost:0.0

그 뒤, 디스플레이를 위와 같이 지정해주자.
다시 DDD를 치면 창이 뜬다 +_+
ddd a.exe
a.exe를 디버깅 하겠다고 하는건데..

안 된다. 왜냐? GDB를 안 깔았으니까.
cygwin의 dev 분류에 gdb가 있으니 그것도 설치하고 재시도...

waiting until GDB is ready가 한참 괴롭힐 것이다...a
어떻게 하면 이것을 없앨 수 있을까.
모르겠다.
껐다 켰다를 반복하다보면 바로 tip이 뜨는 경우가 생기는데 이 경우 로드가 성공한 것이다.
TIP: 그냥 ddd만 실행시키면 그런 일이 없음. ddd에서 a.exe를 수동으로 선택하자?
아니... ddd만 해도 그런경우가 있다. 컴퓨터가 자기 기분 좋으면 디버깅 하게 해주는듯.

gdb사용법을 익혀서 break point거는 방법을 익히는 것이 좋다.
ddd가 그래픽 보여주는 면에선 좋지만 그냥 디버깅적 측면에서는
gdb사용법이 오히려 더 간략하고 좋다? 아닌가 -_-

어쨌거나 필자는 컴파일러 과제를 하고 있었고, 컴파일을 하면, 컴파일러가 인식한 "코드"들이 컴퓨터의 메모리상에 트리 모양으로 나오게 된다. 그것을 텍스트로 출력시키기란 알아보기도 어렵고 골치아픈 일이다.

main함수에 return 0하기 전에 break point를 걸었다.
(gdb)라고 뜨면

(gdb) break main.c:30
이렇게 break point를 걸어주자.

위에서는 그냥 예로, main.c의 30번째 줄에 return0;가 있다면 저렇게 쓰라는 것이다.
return 0;에다 걸면 프로그램이 종료되면서 모든 자료구조와 메모리를 free시키기 직전에 멈추겠죠.
이 때 그 tree의 root node를 보겠다는 의도로 건 break point이다.

이제 준비가 되었으니 본격적으로 display기능을 사용하자.
위의 모눈종이(?)에다 오른클릭을 하고 new display를 하면
뭘 보고 싶냐고 물어본다.

필자의 경우는
absyn_root
라는 variable이다.
absyn_root라고 입력한다.
그러면 띡 하고 네모 빡스가 나온다.
...으로 된 곳에 더블 클릭을 하게 되면 확장되어서 실제 값이 나오게 되고,
그게 포인터 값이라면 0x뭐시기 하는 값으로 나올 것이다.
그 값에 또 더블 클릭을 하게 되면 화살표와 박스가 나타나게 된다(!)
나타나는 상자는 자유로이 드래그 가능하다.

그러면 즐거운 디버깅이 되기 바란다. 스샷도 첨부...a