피드로 돌아가기
A Step-By-Step Guide for Handling Crash of Legacy C++ Application
Dev.toDev.to
Backend

로그 없는 Legacy C++ Crash, Core Dump로 해결하는 단계별 가이드

A Step-By-Step Guide for Handling Crash of Legacy C++ Application

Rui-Tech2026년 4월 4일11advanced

Context

운영 환경에서 Stack Trace나 에러 메시지 없이 C++ 프로세스가 갑자기 종료되는 상황 발생. 디버그 심볼 유무에 따라 원인 분석 방법이 달라지는 레거시 시스템의 디버깅 한계 직면.

Technical Solution

  • Core Dump 생성 여부 확인 후 ulimit -c unlimited 설정 및 /proc/sys/kernel/core_pattern 경로 정의를 통한 덤프 파일 확보 전략
  • file 명령어로 Core 파일과 Binary의 일치 여부를 검증하여 분석 대상의 무결성 확보
  • gdb-s 플래그를 활용해 분리된 Symbol 파일을 로드하거나 addr2line으로 메모리 주소를 소스 코드 라인으로 매핑하는 분석 방식
  • 심볼 파일이 없는 최악의 상황에서 info registersx/i $rip 명령어로 CPU 레지스터 및 어셈블리 인스트럭션을 분석하는 Fallback 프로세스
  • Null Pointer Dereference와 같은 메모리 오류를 식별하기 위해 rax 레지스터 값과 조건부 점프 명령어를 추적하는 로우 레벨 분석 기법

Key Takeaway

장애 복구 시간을 단축하기 위해 배포 바이너리와 별개로 Debug Symbol을 보관하고, 운영 환경에서 Core Dump가 정상 작동하는지 사전 검증하는 Observability 체계 구축 필요.


Release 빌드 시에도 -g 옵션으로 심볼을 생성하되 strip으로 제거하고, 원본 심볼 파일은 Build ID와 함께 별도 저장소에 보관할 것

원문 읽기