DDD 는 Visual Studio 를 사용해서 디버깅을 할때처럼 소스코드 라인 하나하나별로 디버깅을 할 수 있는 리눅스기반 GUI 디버거이다. DDD 자체는 Front End GUI 기능만을 제공해주고 실제 디버거는 gdb 나 다른 디버거와 연동시켜야 한다. 큰 프로젝트 소스로는 테스트 안해봤지만 일단 간단하게 소스파일 2~3개정도로 구성되는 작은 프로그램에서는 잘 동작한다. 테스트는 Ubuntu12.04-64 에서 했다.
우분투에서 ddd 설치는 아주 쉽다
apt-get install ddd
이걸로 끝이다.
그런데 문제는 소스코드를 통한 GUI 디버깅을 하기 위해서는 소스코드를 컴파일할때 gcc -g3 옵션을 줘야한다는 점이다. make 로 컴파일하는 대규모 소스에서 이걸 간단하게 적용할 수 있을지 아직 모르겠다. 일단 a.c, b.c 라는 두개의 c 파일로 구성된 hello world 프로그램의 경우 -g3 옵션을 주고 컴파일한뒤에 ddd 를 소스코드와 바이너리가 있는 경로에서 실행시키면 아래처럼 소스코드 디버깅이 가능하다.
의외로 상당히 쓸만하다. Visual Studio 못지않게 전역/지역변수등에 대해서 값을 실시간으로 출력시킬 수 있고, 포인터를 따라갈 수도 있고, 구조체도 지원한다. F5, F6 으로 step, next 이동을 할 수 있으며 브포 단축키는 있는지 모르겠지만 소스코드 라인에 커서를 놓고 breakpoint 를 누르면 걸린다. F3 으로 프로그램을 Run 시키면 브레이크포인트에서 걸리는데 line by line 커서를 옮길때마다 상단 watch point 로 등록해놓은 변수 및 구조체들의 값이 실시간으로 나타난다. 가장 마음에 드는점은 속도가 매우 빠르다는 점이다.
다른 소스코드에 함수 정의가 있는 함수에서 step in 을 하면 자동으로 해당 함수정의가 있는 소스로 이동한다.
그리고 구조체 변수에 마우스 우클릭을 하고 what is 메뉴를 선택하면 하단 콘솔창에 구조체 정의를 따라가서 출력해주는것을 볼 수 있다.
멀티쓰레드 어플리케이션 및 make 로 컴파일해야하는 대규모 프로젝트 소스에서 제대로 활용될지는 아직 모르겠지만 간단한 C 프로그램 짤때는 아주 유용할것 같다.
'Programming' 카테고리의 다른 글
C++ SEH Handling (0) | 2014.04.02 |
---|---|
Debugging multi-threaded application with GDB attaching (0) | 2014.03.18 |
Intel PIN Tutorial (1) | 2014.03.06 |
Linux gdb ASLR disabling (0) | 2014.03.04 |
IDA/gdb Debugging After Attaching (0) | 2014.03.03 |