들어가며
역시나 기대를 저버리지 않고 이 책은 경험이 풍부한 개발자를 위한 것임을 명확히 밝히고 있다. 죽이 되든 밥이 되든 이 책을 이해할 때까지 붙잡고 있는다면, 고급 개발자에 한 걸음 다가서 있을 것이다.
Chapter 1 — 고차원 전략
공감가는 내용들이 많다. 특히 가장 첫번째 주제인 모든 문제를 이슈 추적 시스템으로 관리한다는 부분에서 저자와 나의 코드가 잘 맞는다고 생각했다.
한편으로는 웹에서 적절한 검색어를 사용하기, 중요한 문제에 집중하기와 같은 당연한 내용까지 굳이 하나의 주제로 다루어져야 하는가 하는 의문이 남았지만, 고수일수록 기본기가 중요하다는 사실을 잊고있었던 것은 아닌가 하는 반성을 하게 되었다.
Chapter 2 — 범용적인 디버깅 기법
개발 언어, 플랫폼을 막론하고 꼭 필요한 디버깅 대원칙들이 잘 정리되어있다. 그중에서도 어려운 문제를 만나면 잠을 자는 방법을 소개한 부분에서 저자에 대한 신뢰감은 급격히 상승했다.
디버깅 데이터를 한 눈에 보기 위해 좋은 그래픽카드와 모니터를 사용하거나 인쇄해서 보라는 부분에서 잠시 고개를 갸우뚱하긴 했지만 역시 기본이 중요하다는 생각을 곱씹게 되었다.
Chapter 3 — 범용 도구를 활용한 기법
유닉스 계열 커맨드라인에서 디버깅을 위해 사용 가능한 명령어의 조합, 환경변수 셋팅 등을 소개한 부분은 꽤나 유용했다.
반면 특정 제품을 소개할 때는 너무 다양한 플랫폼을 다루려다 보니 상대적으로 내용이 부실해져서 그다지 도움이 된다는 느낌을 받진 못했다.
Chapter 4 — 디버거 활용법
C, C++ 환경에서 gdb를 활용하는 예제가 대부분이다. 비쥬얼 스튜디오, 이클립스와 같은 플랫폼도 소개는 하나 단편적이다.
JVM 환경에서 IntelliJ를 주로 활용하는 내게는 크게 와닿지 않는 부분이었다.
Chapter 5 — 프로그래밍 기법
가장 훌륭한 디버깅은 버그가 적은 가독성 높은 코드를 작성하는 것이라는 기본을 상기시켜준다.
Chapter 6, 7 — 컴파일 타임/런타임 기법
정적/동적 검사 도구를 소개하는데 역시 C, C++ 환경에 특화된 내용이 많다.
코드 레벨 디버깅을 넘어 성능, 리소스 모니터링까지 다룬다. 중요한 내용임에는 틀림없으나 영역 자체의 방대함에 비해 짤막한 분량인지라 아쉬움이 남는다.
Chapter 8 — 멀티스레드 코드 디버깅하기
멀티 스레드를 사용하는 코드에서 디버깅하는데 필요한 코딩 습관, 분석 도구, 이론적 배경 등을 설명한다.
멀티 스레드 관련 디버깅은 문제를 재현하기도 수정하기도 쉽지 않기 때문에 마치 아무 문제 없는 것처럼 쉽게 넘어가곤 하는데, 이런 실수를 방지하고 일종의 가이드라인처럼 따라하기에 좋은 내용이 담겨있다.