상위 질문
타임라인
채팅
관점

Gdbserver

위키백과, 무료 백과사전

Remove ads

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

동작 원리

  1. gdbserver는 다음의 인자들과 함께 대상 시스템에서 시작된다:
    • 디바이스 이름(시리얼 라인을 사용할 때) 또는 TCP 호스트 이름과 포트 이름, 그리고
    • 디버깅되는 실행 파일의 경로와 파일이름
    이후 호스트 gdb가 통신할 때까지 수동적으로 기다린다.
  2. gdb는 다음의 인자들과 함께 호스트에서 실행된다:
    • 호스트에서 실행 파일의 경로와 파일 이름
    • 디바이스 이름(시리얼 라인을 사용할 때) 또는 대상 시스템으로의 연결을 위해 필요한 IP 주소와 포트 번호.

원격 대상에 있는 hello_world로 불리는 프로그램을 TCP ("2159"는 원격 GDB를 위해 등록된 TCP 포트 번호이다)를 사용해 디버깅하는 예제:

remote@~$ gdbserver :2159 hello_world
Process hello_world created; pid = 2509
Listening on port 2159
local@~$ 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)
Remove ads

대안

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

같이 보기

노트

Loading content...

각주

Loading content...

외부 링크

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads