마이크로소프트의 수석 설계 엔지니어로서 윈도우 시스템 레벨의 개발 분야에서 지난 9년간 광범위하게 개발에 관여했다. 윈도우 98부터의 5번에 걸친 윈도우 출시 동안에 서버와 데스크탑 관리 분야의 작업을 주로 했으며, 제품의 신뢰성과 견고성, 보안성을 확보하는 데 주력했다.
얼마 전 작업 중에 직면한 매우 난해한 문제에 대해 얘기를 나누었다. QA팀에서 제품에 대한 스트레스 테스트를 진행했는데 4, 5일마다 크래시가 발생하곤 했다. 생각할 수 있는 한도 내에서 크래시를 디버깅했고 원인을 파악하기 위해 집중적인 코드 검토를 했지만 본질에 접근할 충분한 정보를 얻을 수 없었다. 소득없이 몇 주를 허비한 후에 다른 접근법을 찾기 시작했다. 복도에서 담소를 나누는 중에 누군가가 우연히 gflags 툴을 언급했다. 우리는 이 툴을 전혀 들어 본 경험이 없어서 크래시의 본질을 파악하는 데 어떻게 도움을 받을 수 있는지를 알아보기 시작했다. 불행히도 이 툴을 배우는 과정은 다소 어려웠다. 먼저 툴에 관한 정보를 찾기가 만만치 않았다. gflags 툴에 딸린 참고 문서에 많은 정보가 있었지만 실제로 시작하는 법을 이해하기가 어려웠다. 기본적인 참고 지침이 없다면 해당 툴을 사용할 가망성이 없다는 것을 금방 알아차렸다. 그래서 이 툴을 언급했던 사람에게 지침이 될 만한 문서나 조언을 알고 있는지를 물어보기로 했다. 그는 툴에 대한 간단한 설명을 해주었으며 더 중요한 것은 이 툴을 가지고서 광범위하게 작업을 수행했던 사람들을 알려주었다. 소개해준 사람들과의 유익한 대화를 나누고 점차로 이 툴에 대한 개념을 이해하기 시작했다.
우리가 크래시의 본질에 도달했을까? 그렇다. 사실 특정 문제를 겨냥한 스트레스 테스트를 수행하는 동안 오류 코드를 찾고 수정하기 위해 코드 검토에 단 한 시간 정도만 걸릴 정도의 수준으로 툴을 활성화시켰을 뿐이다. 처음부터 gflags 툴과 그 사용법을 알았었더라면 수 주간의 작업을 절약할을 수 있었을 것이다. gflags 툴을 알고부터 오류 코드의 문제해결 시도에 툴의 사용법을 보다 더 이해하기 위해 많은 시간을 투자했다.
다년 간에 걸쳐 윈도우 디버거와 툴은 계속 발전해 점점 강력해져 왔다. 현재 이용 가능한 기능(시간 절약도 가능하게 해주는)은 매우 뛰어나다. 이해할 수 없는 부분은 수 년이 지났지만 네이티브 디버거와 툴은 여전히 소수의 개발자만이 알고 있다는 사실이다. 이런 툴이 존재한다는 것을 알고 있는 극소수의 개발자도 우리가 몇 년 전에 겪은 것과 유사하게 툴을 배우는 고통을 거쳐야 한다는 것이다. 저자는 마이크로소프트 엔지니어(어떤 이는 이 툴을 작성했다)와 일하는 호사스러움을 다행히 누렸지만 이런 기회가 없다면 기대에 찬 많은 개발자가 희망을 잃고서 이 툴로부터 도움을 전혀 받지 못 할 것이다.
배울 수 있는 자료가 부족한 이런 불행한 문제가 종국에는 문제 해결을 위한 좋은 기회가 된 것이며 그래서 이 책을 쓸 생각을 하게 된 것이다. 개발자에게 필요한 지식을 얻도록 할 수 있는 핵심은 디버깅 툴의 상세한 사항을 철저히 설명하는 간결한 정보를 모아서 제공하는 것이다. 지금 보고 있는 이 책은 이런 역할을 할 것이며 3년에 걸쳐 집필되었고 지난 15년 간의 디버깅 경험의 축적물이다.
이 책을 우리가 집필하면서 경험한 즐거움을 독자들도 읽으면서 느끼길 바란다. 이 책은 독자 여러분을 소프트웨어 문제해결과 디버깅을 매우 효과적으로 할 수 있는 실로 놀라운 세계로 안내할 것이다. 이 책에서 기술한 툴의 사용법과 기법을 안다는 것은 컴퓨터 분야의 작업에 중요한 부분이며 소프트웨어의 가장 난해한 몇몇 문제를 매우 효과적으로 해결하는 법을 가르쳐 줄 수도 있다. -저자 서문 중에서