GDBserver |
|
- 작은 GDB 라는 개념 - 실제 GDB와 유사한 시설을 요구하기 때문에 Stub를 완전히 대체할 수 없다. - 원격의 GDB와연결 되어서 GDB의 기능을 일부 사용이 가능하다. - 크기가 작기 때문에 일반 GDB 보다 빠르게 동작한다. |
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)
- Embedded환경에서는 PC환경과는 다르게 OS/threading/IO/UI...등이 불가능 하다. 그리고 이런것들의 부재로 인해서 Embedded환경에서는 디버깅을 실행 할 수 없다.
- 이런 단점을 줄이기 debugger를 작은 크기로 분리해서 중요하지 않고 머신 독립적인 부분만Embedded chip에 남겨놓게 되고 나머지 부분은 원격의 강력한 머신에서 실행되게 된다.
- stub는 test할 프로그램의 안에 존재하면서 프로그램을 실험하게 된다.
- 기본적으로 정지, 진행, reg와 memory에 대한 읽기/쓰기 등의 기능을 가지며, 전체 디버깅을 관리하는 full debugger와 통신을 하게된다.
- stub는 debugger's의 명령에의해서 register memory를 읽고/쓰며 프로그램을 재개시키기만 하면 된다.
- full debugger는 machine에 비해서 성능이 좋은 원격 장치에서 실행이 되어지고, stub와 통신을 하면서 멸여을 보내주고 결과를 받아간다.
- GDB는 다양한 remote stub를 위해서 확장이 가능하다.
- GDB와 stub는 remote serial protocol을 통해서 통신하게 된다.
- 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 정의를 보는데 좋은 정보
'지난일들 > GDB' 카테고리의 다른 글
qemu gdb사용하기 (0) | 2014.03.01 |
---|---|
QEMU에서 remote gdb의 사용 (0) | 2012.08.16 |
gdb_stub 코드 분석_AT128 시뮬레이션용 코드 (0) | 2012.08.10 |
임베디드 Linux 시스템 기반 다중 프로세스 동시 디버깅을 지원하는 원격 디버거 설계 및 구현 (0) | 2012.08.07 |
논문 쓰기 (0) | 2012.08.02 |