Quick Flow
text
증상과 기대값 기록
-> 최소 재현 조건 고정
-> log·breakpoint·trace로 실제 값 관찰
-> 경계를 절반씩 좁혀 가설 하나 선택
-> 실패를 재현하는 test 추가
-> 최소 수정
-> 같은 조건 + 회귀 test로 검증Debugger는 원인을 자동으로 찾는 도구가 아니라 실행 중인 실제 상태를 관찰하는 도구입니다. 먼저 재현 조건과 “어느 값이 언제부터 기대와 다른가”를 고정합니다.
관찰 도구
Breakpoint는 특정 줄·조건에서 실행을 멈추고 call stack, local, thread 상태를 볼 때 사용합니다. Log는 시간과 여러 실행의 흐름을 남기고, trace·profiler는 요청·thread·CPU·I/O처럼 넓은 구간을 연결할 때 사용합니다.
Timing이나 race bug는 debugger로 멈추는 행위 자체가 증상을 바꿀 수 있습니다. 이런 경우 timestamp가 있는 structured log, event trace, dump와 반복 test를 사용합니다.
가설과 수정
한 번에 여러 곳을 바꾸면 무엇이 원인이었는지 검증할 수 없습니다. Input, state transition, dependency call, output 경계를 차례로 확인하고, 실패를 가장 작은 test나 command로 고정한 뒤 한 원인만 수정합니다.
자주 틀리는 점
- Exception을 잡아 무시하고 증상이 사라졌다고 판단하지 않습니다.
- 재현되지 않는 상태에서 추측성 null check를 계속 추가하지 않습니다.
- Logging에 password, token과 개인정보를 남기지 않습니다.
- 수정 뒤 원래 증상만 확인하고 인접 회귀를 빼먹지 않습니다.
참고 링크
2 sources