Gdbserver

gdbserver는 다른 프로그램들을 원격으로 디버깅할 수 있게 해주는 컴퓨터 프로그램이다. 이것은 디버깅되는 프로그램과 같은 시스템에서 동작하며, GNU 디버거를 다른 시스템에서 연결할 수 있게 한다; 즉 소스 코드와 바이너리 파일의 복사본 등은 개발자의 로컬 컴퓨터(호스트)에 두고, 대상 시스템에는 단지 디버그되는 실행 파일만 둘 수 있다. 이 연결은 TCP 또는 시리얼 라인을 통해 가능해 진다.

동작 원리 
 gdbserver는 다음의 인자들과 함께 대상 시스템에서 시작된다:
 디바이스 이름(시리얼 라인을 사용할 때) 또는 TCP 호스트 이름과 포트 이름, 그리고
 디버깅되는 실행 파일의 경로와 파일이름
 이후 호스트 gdb가 통신할 때까지 수동적으로 기다린다.
 gdb는 다음의 인자들과 함께 호스트에서 실행된다:
 호스트에서 실행 파일의 경로와 파일 이름
 디바이스 이름(시리얼 라인을 사용할 때) 또는 대상 시스템으로의 연결을 위해 필요한 IP 주소와 포트 번호.
원격 대상에 있는 hello_world로 불리는 프로그램을 TCP ("2159"는 원격 GDB를 위해 등록된 TCP 포트 번호이다)를 사용해 디버깅하는 예제:remote@~$ gdbserver :2159 hello_world
Process hello_world created; pid = 2509
Listening on port 2159local@~$ gdb -q hello_world
Reading symbols from /home/user/hello_world...done.
(gdb) target remote 192.168.0.11:2159
Remote debugging using 192.168.0.11:2159
0x002f3850 in ?? () from /lib/ld-linux.so.2
(gdb) continue
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x08048414 in main () at hello_world.c:10
10	        printf("x[%d] = %g\n", i, x[i]);
(gdb)

대안 
프로그램을 원격으로 디버깅하는 또 다른 기법은 remote stub을 사용하는 것이다.
이 경우 디버깅되는 프로그램은 GDB 원격 시리얼 프로토콜을 구현하는 특별한 목적의 서브루틴들과 링크된다. 이러한 서브루틴들을 포함하는 파일은 "디버깅 스텁"이라고 불린다.

같이 보기 
 GNU 디버거
 KGDB

노트

각주 
 Andreas Zeller: Why Programs Fail: A Guide to Systematic Debugging, Morgan Kaufmann, 2005.

외부 링크 
 GDB 홈페이지
 GDB로 디버깅하기

디버거
디버깅
GNU 프로젝트 소프트웨어
유닉스 프로그래밍 도구