CHAPTER 1 고차원 전략 아이템 1: 모든 문제를 이슈 추적 시스템으로 관리하기 아이템 2: 해결책을 웹에서 검색할 때 검색어를 구체적으로 표현하기 아이템 3: 선행 조건과 후행 조건 만족 여부 확인하기 아이템 4: 문제 발생 지점부터 버그를 추적하거나, 프로그램 시작 지점부터 버그를 찾아나가기 아이템 5: 정상 시스템과 비정상 시스템의 차이점 분석하기 아이템 6: 소프트웨어에서 제공하는 디버깅 기능 활용하기 아이템 7: 빌드 및 실행 환경을 다양하게 구성하기 아이템 8: 가장 중요한 문제에 집중하기
CHAPTER 2 범용적인 디버깅 기법 아이템 9: 성공적인 디버깅을 위한 마음가짐 아이템 10: 효율적으로 문제 상황 재현하기 아이템 11: 코드 수정한 후 결과 확인까지의 시간 최소화하기 아이템 12: 복잡한 테스트 시나리오 자동화하기 아이템 13: 디버깅 관련 데이터를 한눈에 볼 수 있는 환경 구축하기 아이템 14: 소프트웨어 업데이트 고려하기 아이템 15: 서드파티 소스 코드 분석을 통해 문제 해결하기 아이템 16: 전문 모니터링 및 테스팅 장비 활용하기 아이템 17: 오류의 효과 극대화하기 아이템 18: 원격 디버깅 환경 구축하기 아이템 19: 디버깅 작업 자동화하기 아이템 20: 디버깅 전과 후에 정리하기 아이템 21: 비슷한 문제 모두 고치기
CHAPTER 3 범용 도구를 활용한 기법 아이템 22: 유닉스 명령줄 도구로 디버깅 데이터 분석하기 아이템 23: 명령줄 도구 옵션과 관용 표현 활용하기 아이템 24: 코드 편집기로 디버깅 데이터 탐색하기 아이템 25: 작업 환경 최적화하기 아이템 26: 버전 관리 시스템으로 버그 원인과 히스토리 추적하기 아이템 27: 독립적인 프로세스로 구성된 시스템에서 모니터링 도구 사용하기
CHAPTER 4 디버거 활용법 아이템 28: 디버깅 버전으로 컴파일하기 아이템 29: 한 단계씩 코드 실행하기 아이템 30: 코드와 데이터 중단점 활용하기 아이템 31: 리버스 디버깅 아이템 32: 루틴 사이의 호출 흐름 추적하기 아이템 33: 변수와 표현식의 값을 분석하여 에러 찾기 아이템 34: 실행 중인 프로세스에 디버거 연동하기 아이템 35: 코어 덤프 다루기 아이템 36: 디버깅 도구 조율하기 아이템 37: 어셈블리 코드와 메모리 값 확인하기
CHAPTER 5 프로그래밍 기법 아이템 38: 의심스런 코드를 검토하고 손으로 실행해보기 아이템 39: 동료 검토하기 아이템 40: 디버깅 기능 추가하기 아이템 41: 로그 남기기 아이템 42: 단위 테스트 사용하기 아이템 43: 어서션 사용하기 아이템 44: 코드를 바꿔보면서 검증하기 아이템 45: 정상적인 코드와 문제가 발생한 코드의 차이점 줄이기 아이템 46: 의심스런 코드 간소화하기 아이템 47: 의심스런 코드를 다른 언어로 작성해보기 아이템 48: 의심스런 코드의 가독성과 구조 향상시키기 아이템 49: 버그의 증상이 아닌 원인 고치기
CHAPTER 6 컴파일 시간 기법 아이템 50: 생성된 코드 확인하기 아이템 51: 정적 분석 도구 활용하기 아이템 52: 빌드 결과와 실행 동작이 항상 일정하도록 설정하기 아이템 53: 라이브러리에서 제공하는 디버깅 및 검사 기능 설정하기
CHAPTER 7 실행 시간 기법 아이템 54: 테스트 케이스를 작성하여 오류 찾기 아이템 55: 오류가 발생한 즉시 프로그램 중단하기 아이템 56: 애플리케이션 로그 파일 분석하기 아이템 57: 시스템 및 프로세스 연산에 대한 프로파일 분석하기 아이템 58: 실행 흐름 추적하기 아이템 59: 동적 프로그램 분석 도구 활용하기
CHAPTER 8 멀티스레드 코드 디버깅하기 아이템 60: 사후 디버깅으로 교착 상태 분석하기 아이템 61: 프로그램의 실행 흐름을 기록한 뒤 재생하기 아이템 62: 전문 도구로 교착 상태와 경쟁 상태 찾기 아이템 63: 예측할 수 없는 부분을 분리하거나 제거하기 아이템 64: 자원 경쟁으로 인해 발생한 성능 확장성 문제 분석하기 아이템 65: 성능 카운터를 이용하여 거짓 공유 발생 지점 찾기 아이템 66: 고수준 추상화를 사용하도록 코드 다시 작성하기
Effective Debugging 이란 책은 한참 여러 문제가 발생하여 디버깅 역량 향상이 필요하다는 생각이 들었을 때 발견한 책입니다. 시스템 소프트웨어 및 프레임워크 개발하면서 겪은 다양한 문제점과 그 문제들을 해결하면서 그동안 쌓아온 여러가지 디버깅 스킬들을 머리속으로 정리하고 새로운 방식이 있나 하는 마음에 구매하게 되었습니다.
이 책은 소프트웨어 및 시스템 오류를 해결하기 위한 전략부터 시작해서 방법론, 디버깅 툴과 기법, 디버거를 이용한 디버깅 중 적용할 수 있는 여러 기법들과 프로그램을 작성하는 과정에서 필요한 기법 등을 총 66가지 전략으로 나눠 설명하고 있습니다. 책의 기본적인 예시는 C/C++을 기반으로 하고 있으며 부분적으로 Java 기반 프로젝트에서 디버깅 할 수 있는 툴이나 기법들도 설명하고 있습니다.
총 66가지의 전략 중 절반 이상의 전략은 알고 있는 툴이나 기법들이지만 그 내용을 다시 한번 살펴봄으로서 리마인드 하는 계기가 되었네요, 이 책은 66가지의 전략, 즉 소주제를 다루기에는 책이 매우 얇습니다. 디버깅에 대해서 깊게 다루진 않지만 어느 상황에 이러한 전략과 디버거로 문제를 해결해 나갈 수 있는지 실마리를 줍니다. 예제 또한 매우 쉽고 단순한 예제라 실제 프로젝트에 사용할 수 있는 예제는 아니지만 처음 방향을 알려줌으로써 개인적으로 학습해 나아갈 수 있도록 해주는 책인 것 같습니다.
디버깅에 대한 개략적인 느낌만 알고 항상 표준출력(printf 등등..)을 이용해서 로그를 찍어가며 디버깅 하시던 분들은 꼭 한번 읽어보시면 좋을 것 같습니다. 책이 그렇게 두껍지도 않고 소주제로 나눠져 있어 필요한 부분만 찾아 보기에도 굉장히 편합니다.
예전에 처음 소프트웨어 개발을 시작하던 때엔 print 문으로 순차적으로 하나씩 디버깅하던 기억이 나네요, 지금까지 개발을 하면서 여러 디버깅 스킬들을 익히고 다양한 디버거들을 접하고 발전했다고 생각되지만서도 아직 많이 부족한 느낌이 많습니다. 이 책을 계기로 다시 다양한 시야로 디버깅을 할 수 있는 좋은 계기가 된 것 같네요.