리눅스데브코스 [7주차 - 5(5)]<주요 리눅스 커널 디버깅 기능>

심우열·2023년 5월 22일
0

1. 디버깅

1. 오픈소스 프로젝트인 리눅스 커널의 특징

  • 오픈 소스 특성 상 리눅스 커널은 여러 개발자가 작성한 코드로 구성됨
  • 다른 개발자의 코드를 훨씬 더 많이 분석해야 함
  • 리눅스 디바이스 드라이버는 리눅스 커널이 제공하고 있는 함수를 호출

2. 디버깅이란?

  • 버그를 수정
  • 커널 소스 코드나 해당 드라이버나 기능을 이해
  • 바이너리, 소스, 디자인
  • Narrow Down(문제의 범위를 좁혀가는 것)

3. 커널 디버깅 기법의 종류

  • Brain
  • printk, dump_stack
  • debugfs
  • ftrace
  • QEMU
  • TRACE32
  • Crash utility
  • GDB

1. printk란?

  • printf 와 같은 커널 프린트 함수
  • 어느 커널 코드에도 사용 가능

1. 로그 레벨

  • 설정도니 로그 래벨에 따라 메시지를 출력하는 범위가 달라짐
  • 낮은 로그 레벨, 더 적은 메시지
  • 높은 로그 레벨, 더 많은 메시지
  • KERN_WARNING 이 디폴트 로그 레벨

로그 레벨 확인

터미널로 설정

디바이스 트리로 로그 레벨 설정

2. printk 주의 사항

  • printk를 추가한 함수가 자주 호출될 때(ex. schedule())
  • 인터럽트 컨텍스트

printk는 오버헤드가 걸리는 동작이기 때문!

  • 콘솔 드라이버는 프린트 버퍼를 플러시 함
  • 커널 로그가 도배되면 시스템에 오버헤드 유발
  • 성능이 낮은 시스템은 Hang에 걸릴 수 있음
  • 부팅 실패

printk_ratelimit() 함수 사용

  • 콘솔에 메시지가 쌓이면 printk_ratelimit() failure 상태 리턴
  • 1초에 5번 출력 됨

2. dump_stack()

1. dump_stack()이란?

  • 스택 트레이스를 커널 로그로 출력
  • 예외 처리나 심각한 오류가 있는 조건에서 사용

2. dump_stack() 함수 사용 방법

  • #include <linux/kernal.h> 헤더 추가 후 함수 호출

3. sysrq 매직 키

1. 사용 방법

CONFIG_MAGIC_SYSRG

echo -<magic keys> > /proc/sysrq-trigger

magic keys

  • s: sync(더티 페이지를 디스크로 플러시)
  • u: read_only로 리마운트
  • t: 현재 태스크를 출력
  • b: reboot
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글