앞에서 설명한 커널 디버거 KGDB 와 KDB 를 서로 비교해서 설명하고 있다.
참고로 이 문서에서 서술한 내용은 '임베디드 리눅스 시스템 설계와 개발'이라는 서적에서 발췌한 것임을 미리 밝혀둔다.

KDB 와 KGDB 비교

KDB KGDB
디버거 환경 KDB는 커널 내부에 포함되어 빌드되어야 하는 디버거이다. KDB 는 명령을 입력받고 출력을 표시하기 위한 콘솔을 필요로 한다. KGDB 는 직렬 케이블상에서 GDB 프로토콜을 통해 타겟과 통신할 디버거를 일반 프로세스로 실행시킬 수 있는 개발용(호스트) 머신을 필요로 한다. 최신 버전의 KGDB 는 이더넷 인터페이스도 지원한다.
커널지원/패치 필요 KDB 는 두 가지 패치를 필요로 한다. 하나는 아키텍처에 독립적인 부분을 구현한 일반 커널 패치이며, 다른 하나는 아키텍처에 종속적인 부분을 구현한 패치이다. KGDB 는 다음과 같은 세 가지 요소를 포함하는 하나의 패치를 사용한다. ① 타겟에서 사용될 GDB 프로토콜을 구현한 GDB 스텁 ② 타겟과 개발용 머신 간에 메시지를 송수신하기 위해 수정된 직렬(혹은 이더넷) 드라이버 ③ 예외가 발생하면 디버거로 제어를 넘기도록 수정된 예외 처리 함수
소스-레벨의 디버깅 지원 지원하지 않는다. 커널이 개발용 머신상에서 -g 플래그와 함께 컴파일되고 커널 소스 트리에 접근할 수 있다면 소스-레벨의 디버깅을 지원한다. 디버거가 실행되는 개발용 머신에서 -g 옵션은 gcc 가 컴파일 시에 디버깅 정보를 생성하도록 지정하며 소스 파일들과 함께 커널의 소스-레벨 디버깅을 지원한다.
제공하는 기능 가장 널리 사용되는 KDB 의 디버깅 기능들은 다음과 같다. ① 메모리의 레지스터 값의 표시 및 수정 ② 중단점 표시 ③ 스택 역추적(backtrace) 사용자가 지정한 중단점은 물론 커널이 시스템 패닉이나 OOPS 와 같은 복구할 수 없는 에러 상태에 도달하면 KDB가 호출된다. 사용자는 KDB 의 출력을 통해 문제점을 진단할 수 있다. GDB 의 실행 제어, 스택 추적, 쓰레드 분석 등의 기능들과 KGDB 에 종속적인 감시점(watchpoint) 등을 제공한다.
커널 모듈 디버깅 KDB 는 커널 모듈 디버깅을 지원한다. KGDB 를 이용하여 커널 모듈을 디버깅하기 위해서는 약간의 트릭이 필요하다. 왜냐하면 모듈은 타겟 머신에 로드되고 디버거(GDB)는 다른 (개발용) 머신에서 실행되기 때문이다. 따라서 KGDB 는 모듈이 로드된 주소 정보를 얻을 필요가 있다. KGDB 1.9 는 자동으로 모듈의 로드/언로드를 인식할 수 있는 특별한 GDB 를 수반한다. 1.8 이전의 버전들은 GDB 명령인 add-symbol-file 을 이용하여 명시적으로 모듈 객체를 로드 주소와 함께 GDB 의 메모리에 로드해야 한다.
웹사이트 http://oss.sgi.com/projects/kdb/ http://kgdb.linsyssoft.com
  • computer/rtcclab/커널_디버거_사용하기_-_3.kgdb_와_kdb_비교.txt
  • Last modified: 3 years ago
  • by likewind