19.7.3. 로깅(Logging) 및 출력 결과 검증

19.7.3. 로깅(Logging) 및 출력 결과 검증

시뮬레이터 공간(SITL)에 픽스호크를 띄우고 우리의 커스텀 데몬 스레드를 백그라운드로 돌려보냈다면, 이제 개발자의 눈을 가리고 있던 마지막 안대를 벗어 던질 차례이다.
1000Hz의 현기증 나는 속도로 링 버퍼를 오가는 데이터 파이프라인의 내부 상황을, 보이지 않는 무형의 전기 신호에서 인간이 읽고 디버깅할 수 있는 텍스트와 그래프로 멱살 잡아 끌어내는 작업, 바로 **로깅(Logging)과 무결성 검증(Verification)**이다.

초급 프로그래머 꼬리표를 떼지 못한 학부생들은 흔히 C 표준 라이브러리의 printf()std::cout 하나만을 신줏단지 모시듯 붙들고 모든 디버그 텍스트를 터미널로 무자비하게 쏟아낸다. 하지만 PX4와 같은 군사/항공 우주급 하드 리얼타임(Hard Real-time) 커널 생태계 내부에서, 인터럽트 핸들러나 고속 콜백 Run() 함수 안쪽을 printf 떡칠로 도배해 버리는 것은 자신의 시스템 메모리를 찢어발기겠다는 명백한 런타임 자살 선고와 다름없다.

1. PX4 전용 커널 로깅 매크로 시스템의 절대 권력

NuttX 커널과 SITL 환경을 관통하는 PX4 로깅 시스템은 절대 원시적인 printf를 용납하지 않는다. 그 대신 스레드 세이프(Thread-safe)하고, 메모리 락(Lock) 지연을 최소화하며, 비행이 끝난 후 SD 카드에 저장될 ULog 파일과 실시간 터미널 출력(Console)을 완벽하게 동시 타격(Duplex)하는 전지전능한 **PX4 전용 로깅 매크로(Macro)**들을 제공한다.

이어지는 단원들에서는 이 PX4 고유의 로깅 생태계를 치밀하게 해부하여 여러분의 코드 곳곳에 레이더 초소를 박아 넣게 될 것이다.

  • 19.7.3.1 단원: 밋밋한 텍스트에 INFO(정보), WARN 경고, 그리고 핏빛의 ERROR 수준(Level)을 부여하여 시스템 터미널과 비행 기록 장치(Blackbox)를 동시에 지배하는 PX4_INFO, PX4_WARN, PX4_ERR 코어 매크로 삼신기의 물리적 타설 기법을 다룬다.
  • 19.7.3.2 단원: 이 매크로 레이더들을 퍼블리셔 데몬과 구독자 데몬 양쪽 심장부 깊숙한 곳에 각각 박아 넣고, 퍼블리셔가 VFS 우체통에 쏴올린 숫자가 구독자단 메인 보팅 루프에서 단 한 치의 오차(Data Race, Memory Corruption)도 없이 통과하여 일치(Consistency)하는지 수학적으로 대조하는 실전 통합 검증 아키텍처를 시연한다.

이 디버깅과 로깅의 철벽 아키텍처를 당신의 소스 트리에 구축하고 나면, 하늘 높이 날아가는 드론 내부에서 어떤 극악의 레이스 컨디션 버그가 터지더라도 비행기 블랙박스(ULog)를 열어 단 몇 분 만에 버그의 근원지 라인을 찾아내어 목을 칠 수 있는 전능한 감시 스펙트럼(Spectrums)을 확보하게 될 것이다.