디버깅에 대해서

김민세·2022년 11월 1일
0
post-thumbnail

디버깅이란?

커널 디버깅은 debug-ing의 합성어로 버그를 잡는 과정을 뜻한다.

리눅스 커널과 드라이버가 정상 동작할 때 자료구조와 함수 호출 흐름까지 파악하는 과정을 디버깅이라고 생각한다.

디버깅이 중요한 이유

  • 문제 해결 능력
  • 커널 코드 학습 능력

디버깅은 문제 해결 능력

임베디드 리눅스는 '클라우드 서버', '휴대폰', '전기자동차' 분야까지 다양한 분야에서 쓰이고 있다. 따라서 실전 개발 업무가 어떻다고 설명하긴 어렵다.
하지만 어떤 리눅스 업무를 맡고 있더라도 공통적으로 리눅스 커널 디버깅에 관심을 갖고 배우려고 한다

왜 임베디드 및 BSP 개발자들은 커널 디버깅 능력을 키울려고 할까?
그 이유는 간단하다. 커널 디버깅은 문제 해결 능력 그 자체이기 때문이다.

임베디드 리눅스 대표적인 문제

  • 부팅 도중 커널 크래시 발생
  • 인터럽트 핸들러를 설정했는데 인터럽트 핸들러가 호출되지 않음
  • 시스템 응답 속도 매우 느려짐
  • 파일 복사가 안 됨

위와 같은 문제가 생기면 임베디드 리눅스 개발자가 해결한다
먼저 문제가 발생한 원인을 정확히 분석해야한다. 정확히 문제를 분석해야 이에 따른 해결책이 나온다.

실전 개발에서는 문제가 발생했을 때 확보한 커널 로그와 메모리 덤프로 문제 원인을 분석할 수 있다.

임베디드 리눅스 개발에서 커널 로그와 메모리 덤프를 정확히 분석하는 스킬을 커널 디버깅이라고 한다.
커널 디버깅은 문제 해결 능력 그 자체라고 할 수 있다.


왜 디버깅이 필요할까?

임베디드 리눅스 개발을 하다가 문제가 생기면 대부분 커널 로그를 본다. 그런데 디바이스 드라이버 코드에 오류가 있으면 우리가 작성한 드라이버 코드에서 오류 메세지를 출력하지 않는다. 대부분의 경우 디바이스 드라이버가 호출한 함수 내부에서 에러 메세지를 출력한다.


디버깅 과정

  1. 오류 메시지를 커널 어느 코드에서 출력했는지 확인한다.
  2. 소스코드에서 에러 메세지를 출력한 이유를 살펴본다.
  3. 필요에 따라 디버깅 코드를 작성해 다시 문제가 발생했을 때 추가 커널 로그 확보를 시도한다
profile
김민세

0개의 댓글