줄리아 에반스(Julia Evans)가 만든 짧은 책(zine)으로, 버그를 대하는 마음가짐과 바로 써먹을 수 있는 전략을 모았다. 특정 언어나 도구가 아니라 디버깅이라는 기술 자체를 다룬다.
디버깅 매니페스토(Debugging Manifesto)
- 덮지 말고 조사한다: "일단 고쳐야 해" 대신 "무슨 일이 일어난 거지?"를 먼저 묻는다
- 막힌 건 잠깐이다: 영영 못 풀 것 같아도 20분 뒤 안 해 본 방법이 떠오른다
- 아무것도 믿지 않는다: "이 라이브러리에 버그가 있을 리 없어"도 가정일 뿐이다
- 아마 내 코드 문제다: 그래도 확률로는 내 코드일 때가 많다
- 혼자 하지 않는다: 같이 보면 새 질문과 도구가 생긴다
- 이유는 항상 있다: 그렇게 느껴지지 않아도 컴퓨터는 논리적이다
- 도구 상자를 만든다: 좋은 도구 하나가 디버깅을 바꾼다
- 모험이 될 수 있다: 이상한 버그는 이야깃거리다
주요 전략
- 재현하고 정리하기: 현장(로그, 입력, 스크린샷)을 보존하고, 에러 메시지를 처음부터 두 번 읽는다. 버그를 재현해 실패하는 테스트로 고정하고, 의심 가는 원인을 거르지 말고 모두 적은 뒤 하나씩 지운다 → 디버깅 문제 정의 5단계
- 증거 모으기: print, 디버거(Debugger), REPL(Read-Eval-Print Loop), 어서션, 로그 분석으로 실제 동작을 본다. 공식 문서와 라이브러리 소스(특히 테스트 코드), 이슈와 릴리스 노트도 본다. 버그의 '종류'를 알면 검색어가 생긴다(간헐적이면 경쟁 상태(Race Condition)를 의심하는 식)
- 범위 좁히기: 잘 되던 버전과 비교하고(git bisect로 원인 커밋 찾기), 작은 프로그램으로 줄이고, 한 번에 하나만 바꾸고, 무작위성을 없앤다 → 최소 재현
- 막혔을 때: 쉬기, 같이 보기, 조사 마감 정하기, 말로 설명하기, 내 코드가 정말 실행되는지 확인하기 → 러버덕 디버깅
- 다음을 위해: 피드백 루프(Feedback Loop)를 짧게 만들고 출력과 로그를 읽기 좋게 다듬는다 → 크롬 개발자 도구 팁. 고친 뒤에는 배운 것을 나누고, 비슷한 버그를 함께 찾고, 커밋 메시지로 맥락을 남긴다 → 커밋 메시지와 원자적 커밋
조용히 삼켜진 예외가 디버깅을 어렵게 만드는 경우가 많다 → 예외 삼키기
출처: The Pocket Guide to Debugging Julia Evans · A debugging manifesto Julia Evans