디버거 작업 흐름

디버거 상태 추적

breakpoint를 많이 거는 것보다 정상 상태가 처음 깨지는 상태을 찾는 것이 중요하다. 재현 입력, 조건부 중단, watch가 함께 움직여야 한다.

01

재현 고정

입력 파일, 인자, 환경 변수를 기록해 같은 실패를 반복한다.

02

정상 동작과 오류 조건을 구분한다

값이 아직 정상인 지점과 이미 깨진 지점 사이에 중단점을 배치한다.

03

변경 주체 탐색

watchpoint나 조건부 breakpoint로 어떤 호출이 값을 처음 망가뜨렸는지 확인한다.

conditional
특정 경우만 중단 반복문 수천 번 중 문제 인덱스에서만 멈추게 한다.
시간을 크게 줄인다.
watchpoint
메모리 변경 추적 값이 언제 바뀌는지 하드웨어 또는 디버거 기능으로 잡는다.
지원 범위를 확인한다.
call stack
도착 경로 현재 함수가 누가 호출해서 왔는지 보여 준다.
재귀와 callback에서 중요하다.
thread
동시 실행 상태 다른 스레드가 lock을 잡고 있는지 확인한다.
deadlock 조사에 필수다.

최소 입력 · 조건부 중단 · 스레드 확인 점검

최소 입력 실패를 재현하는 가장 작은 입력을 확보했는가.
조건부 중단 반복이 많은 지점에 조건 없이 멈춰 시간을 낭비하지 않는가.
스레드 확인 동시성 문제에서 현재 스레드만 보고 결론 내리지 않는가.

조사 순서

// 1. 실패 입력 고정
// 2. 정상/오류 경계 찾기
// 3. 조건부 breakpoint 설정
// 4. watch와 call stack 기록