C++ 디버거 사용

디버거 점검 기준

디버거 사용법은 버튼 이름보다 멈출 지점과 관찰할 값을 정하는 능력이다. breakpoint, step, watch, call stack, 조건부 중단점을 조합해 재현 가능한 실패를 좁힌다.

01

재현 조건

입력, 옵션, 환경을 고정해 같은 실패가 반복되게 만든다.

첫 단계
02

중단 지점

증상이 생기기 직전의 상태 변경 함수에 breakpoint를 건다.

너무 넓게 멈추지 않기
03

흐름 추적

step into/over/out으로 호출 경계와 예상 분기를 확인한다.

호출 비용 절약
04

상태 비교

watch와 call stack으로 값이 언제 처음 깨지는지 역추적한다.

원인 지점
conditional
특정 값에서만 멈춤 반복문 수천 번 중 문제 조건이 성립할 때만 중단한다.
성능 비용
data breakpoint
메모리 변경 감시 누가 값을 바꾸는지 모를 때 주소 변경을 추적한다.
도구 지원 필요
call stack
호출 경로 파악 잘못된 함수가 왜 호출됐는지 상위 프레임 인자를 본다.
컨텍스트
optimized
최적화 빌드의 제약 변수가 사라지거나 순서가 바뀔 수 있어 디버그 정보와 최적화 수준을 조정한다.
release 재현도 필요

심볼 · 수명 · 스레드 점검

심볼 디버그 심볼이 포함된 빌드인지 확인한다.
수명 dangling pointer는 값 자체보다 소유 객체의 파괴 시점을 추적한다.
스레드 멀티스레드 버그는 현재 스레드와 락 상태를 함께 확인한다.