피드로 돌아가기
Dev.toBackend
원문 읽기
로그 없는 Legacy C++ Crash, Core Dump로 해결하는 단계별 가이드
A Step-By-Step Guide for Handling Crash of Legacy C++ Application
AI 요약
Context
운영 환경에서 Stack Trace나 에러 메시지 없이 C++ 프로세스가 갑자기 종료되는 상황 발생. 디버그 심볼 유무에 따라 원인 분석 방법이 달라지는 레거시 시스템의 디버깅 한계 직면.
Technical Solution
- Core Dump 생성 여부 확인 후
ulimit -c unlimited설정 및/proc/sys/kernel/core_pattern경로 정의를 통한 덤프 파일 확보 전략 file명령어로 Core 파일과 Binary의 일치 여부를 검증하여 분석 대상의 무결성 확보gdb의-s플래그를 활용해 분리된 Symbol 파일을 로드하거나addr2line으로 메모리 주소를 소스 코드 라인으로 매핑하는 분석 방식- 심볼 파일이 없는 최악의 상황에서
info registers와x/i $rip명령어로 CPU 레지스터 및 어셈블리 인스트럭션을 분석하는 Fallback 프로세스 - Null Pointer Dereference와 같은 메모리 오류를 식별하기 위해
rax레지스터 값과 조건부 점프 명령어를 추적하는 로우 레벨 분석 기법
Key Takeaway
장애 복구 시간을 단축하기 위해 배포 바이너리와 별개로 Debug Symbol을 보관하고, 운영 환경에서 Core Dump가 정상 작동하는지 사전 검증하는 Observability 체계 구축 필요.
실천 포인트
Release 빌드 시에도 -g 옵션으로 심볼을 생성하되 strip으로 제거하고, 원본 심볼 파일은 Build ID와 함께 별도 저장소에 보관할 것