본문 바로가기

Programming

Linux DDD Debuger

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