DDD를 이용한 원격 디버깅
DDD는 gdb
등 커맨드라인 방식 디버거를 위한 GUI 프로그램이다. 그러므로 디버거의 출력 내용을 분석하여 그래픽적으로 보여주는 기능만 있을 뿐 디버깅 기능 자체는 없다. 따라서 DDD를 사용하기 위해서는 최소한 gdb와 같은 디버거를 필요로 한다.
DDD 자체의 사용법은 이미 많은 곳에서 설명하고 있다. 여기서는 자신의 컴퓨터에 있는 DDD를 이용하여 원격에 있는 시스템에서 실행되고 있는 프로그램을 디버깅하기 위한 방법을 설명한다. (이 원격 디버깅을 하게 된 동기는, 무선랜 디바이스를 갖춘 노트북에서 프로그램을 실행하고 디버깅해야 하는데, 노트북의 스크린 해상도라든가 키보드 크기가 장시간 사용하기에 불편했고 무엇보다도 노트북 방향으로 어중간하게 돌아 앉으려니 허리가 아팠기 때문이다. --;)
위 그림은 원격 디버깅을 위한 전형적인 환경을 나타낸다.
- Target: 디버깅을 할 프로그램이 실행되는 시스템. 디버깅을 위한 실행 파일 또는 코어 파일과, 실제로 디버깅 작업을 수행하는 디버거가 있다.
- Host: 작업자의 컴퓨터. 소스 디버깅을 위한 프로그램 소스와, 디버거의 GUI 인터페이스인 DDD가 위치한다.
이렇게 두 대의 시스템으로 구성된다. host와 target 간에 먼저 rsh
나 ssh
등의 remote shell 연결이 이루어 지고, 그 위에서 DDD와 gdb가 서로 디버깅 정보와 명령을 주고받는다. rsh
로도 연결이 가능하지만, 이번 작업에서는 ssh
로 연결을 하였다. ssh
로 연결하기 위해서는 Host에 있는 DDD 관련 설정 파일을 편집해야 한다. DDD 소스와 함께 따라오는 문서에는 ~/.ddd/init
파일을 열어서
Ddd*rshCommand: /usr/bin/ssh # (path-to-ssh)
을 추가해야 한다... 라고 되어있지만, gentoo 패키징 시스템에서 바꾼 건지 아니면 원래 DDD가 그렇게 코딩되어 있는지 DDD가 종료될 때마다 위 내용을 추가한 init 파일을 원래 설정 값으로 자동으로 덮어써버려서 위의 설정 내용이 지워졌었다. 그래서 Ddd라는 X Window용 resource 파일을 편집했다. gentoo 패키지에는 /usr/share/ddd-(version)/
디렉토리 밑에 있고, 그 외의 경우에는 확실치 않지만 /usr/X11R6/lib/X11/app-defaults/
디렉토리에 위치해있으리라고 짐작한다.
target 시스템에 sshd 데몬이 실행되어 있는 지 확인한 후, DDD를 실행한다.
$ ddd --host (target) --login (username) (file)
또는
$ ddd --host (username)@(target) (file)
와 같이 실행한다.
위 예제의 (file)
에는 target 시스템 상에서 디버깅할 파일이 있는 곳의 절대 경로 또는 (username)
계정의 홈디렉토리로부터의 상대 경로를 꼭 포함해줘야 한다.
접속이 이루어지면 DDD의 콘솔 창에 (username)
계정의 비밀 번호를 입력하라고 나온다. 이 때 비밀 번호를 입력하면 화면에 그대로 표시되므로 주의해야 한다.
여기까지 진행되면 원격 디버깅을 할 준비가 완료된 것이다. 자, 이제부터는 건투를.