지난일들/GDB

GDB stub에 대해서....

바위맨 2012. 8. 2. 17:15
반응형


 GDBserver

 

- 작은 GDB 라는 개념

- 실제 GDB와 유사한 시설을 요구하기 때문에 Stub를 완전히 대체할 수 없다.

- 원격의 GDB와연결 되어서 GDB의 기능을 일부 사용이 가능하다.

 - 크기가 작기 때문에 일반 GDB 보다 빠르게 동작한다.


http://sunder4.tistory.com/21

 GDBstub

 

-원격의 머신에서의 프로그램을 디버깅한다.

- set_debug_taps: handle_exception 조정

- handle_exception: 프로그램 실행도중 정지할 경우(ex)break point)에서 제어를 갖게된다.    그리고 호스트 머신에 있는 GDB와의 통신을 중재한다. 타겟머신에서 GDB를 대신해서 동작.

- breakpoint 삽입

 


1. GDB(GNU debugger)?

* 프로그램 실행동안 프로그램 내부에서 진행되고 있는 상황들을  Line by Line으로 훑어 볼 수 있는 툴

    • 프로그램을 시작할 때 프로그램의 행동에 영향을 줄 수 있는 것을 지정할 수 있다
    • 프로그램을 지정된 조건에서 멈추도락 만든다.
    • 프로그램이 멈추었을때 무엇이 일어났는지를 시험할 수 있다.
    • 프로그램 내의 어떤것을 바꾸어서, 버그를 고칠수 있도록 테스트할 수 있다.

DDD(Data Display Debugger): 여러 디버거의 프론트 엔드로 CLI디버거들에게 GUI환경을 제공. 때문에 DDD를 사용하기 위해서는 GDB같은 실제 디버거가 있어야 한다.


2. GDB stub

(A minimal GDB stub for embedded remote debugging, Minheng Tan, 12/12/2002)

    1. Embedded환경에서는 PC환경과는 다르게 OS/threading/IO/UI...등이 불가능 하다. 그리고 이런것들의 부재로 인해서 Embedded환경에서는 디버깅을 실행 할 수 없다.
    2. 이런 단점을 줄이기 debugger를 작은 크기로 분리해서 중요하지 않고 머신 독립적인 부분만Embedded chip에 남겨놓게 되고 나머지 부분은 원격의 강력한 머신에서 실행되게 된다.
    3. stub는 test할 프로그램의 안에 존재하면서 프로그램을 실험하게 된다.
    4. 기본적으로 정지, 진행, reg와 memory에 대한 읽기/쓰기 등의 기능을 가지며, 전체 디버깅을 관리하는 full debugger와 통신을 하게된다.
    5. stub는 debugger's의 명령에의해서 register memory를 읽고/쓰며 프로그램을 재개시키기만 하면 된다.
    6. full debugger는 machine에 비해서 성능이 좋은 원격 장치에서 실행이 되어지고, stub와 통신을 하면서 멸여을 보내주고 결과를 받아간다. 
    7. GDB는 다양한 remote stub를 위해서 확장이 가능하다.
    8. GDB와 stub는 remote serial protocol을 통해서 통신하게 된다.
    9. stub == GDBserver/ running on Target, GDB == running on Host

3. debugger(ex) GDB)

    • source code와 메모리 상의 binary코드의 연관성을 알아야 한다.
    • symbol table을 가지고 있어서 각 코드의 위치를 확인 할 수 있다.
    • table을 저장하고 복수 있기 때문에 stub에 요청하지 않아도 정보 확인 가능하다.
    • symbol table을 통해서 breakpoint를 설정할 수 있다.
    • 각각의 프레임 확인을 통해서 stack등 실행중인 프로세스의 정보를 확인할 수 있어야 한다.

4. Stub의 구현

* 기본적으로 exception or signal handling이 필요하게 된다.

    • 사용자가 설정한 위치에서 breakpoint를 설정하게 된다.(exception or signal발생)
    • ex) ptrace를 통해서 signal handler 실행 될 때까지 대기한다. 이런 방법을 통하면 debuge를 위한 추가적인 handler를 설치할 필요가 없게 된다.
    • 기본적으로 디버깅하려는 프로그램의 signal intercepting and handling a signal
    • The stub must be able to restore the program context and switch to the program when requested by gdb
    • Fetching and writing the registers and memory by stub
    • stub의 동작은 OS의 지원없이 

추가정보

http://www.aosabook.org/en/gdb.html

http://www.ezdoum.com/upload/2/20020716203154/gdbint_13.html

http://wiki.osdev.org/GDB    정의를 보는데 좋은 정보

반응형