Top

실전 윈도우 디버깅 [애플리케이션에서 시스템 프로그래밍까지 윈도우 프로그래밍 오류 분석과 툴 활용 기법]

  • 원서명Advanced Windows Debugging (ISBN 9780321374462)
  • 지은이Mario Hewardt, Daniel Pravat
  • 옮긴이김점갑
  • ISBN : 9788960770614
  • 46,000원
  • 2008년 10월 07일 펴냄 (절판)
  • 페이퍼백 | 840쪽 | 188*250mm
  • 시리즈 : 윈도우 시스템 프로그래밍

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

윈도우 애플리케이션부터 시스템 프로그래밍까지 메모리(스택, 힙) 손상과 자원 누수, 크래시 분석, 보안 문제, 서버/클라이언트, 동기화 문제 등의 근본 원인을 파악하는 기법과 문제 탐지에 사용할 수 있는 강력한 디버깅 툴의 활용법과 전용 디버깅 명령 작성법을 소개한다. 또한 회사에 디버깅이 가능한 시스템(소스 서버와 심볼 서버)을 구축하는 법과 윈도우 오류 보고와 기업 오류 보고 시스템을 구축해 자동으로 오류를 전달받고 패치하는 메커니즘까지 다루는 실전 윈도우 디버깅에 대한 체계적이고 심도 있는 완벽 가이드다.


[ 소개 ]

■ NTSD와 CDB, WinDbg, KD, ADPlus 등 가장 강력한 최신 윈도우 디버깅 툴
■ 디버깅을 고려하지 않고 설계, 작성한 코드를 디버깅하는 방법
■ 디버거의 이면과 효과적인 심볼/소스 관리법
■ 스택이나 힙과 관련된 복잡한 메모리 손상 디버깅 방법
■ 복잡한 보안 문제 해결 노하우
■ 신분 추적과 RPC 디버거 확장, Ethereal를 통한 IPC 추적 등 여러 프로세스에 걸친 문제 디버깅
■ 메모리와 핸들 누수 같은 리소스 누수 수정
■ 일반적인 스레드 동기화 문제 디버깅
■ 커스텀 디버거 익스텐션을 작성해야 할 시점과 방법 이해
■ 크래시 덤프를 사용한 ‘포스트모템 디버깅’ 수행과 윈도우 오류 보고 시스템과의 통합
■ DebugDiag 툴과 Analyze 디버거 명령을 사용한 디버깅 작업 자동화

윈도우의 개발자에게 있어서 디버깅보다 더 난해하며 잔인한 작업은 거의 없다. 신뢰할 만하고 실제적인 정보가 항상 부족했다. 이제 15년 이상의 경력을 가진 마이크로소프트 시스템 개발자인 두 저자가 윈도우 디버깅에 대한 철저한 실전 지침을 제공한다.
저자들은 애플리케이션 전체 수명에 걸친 디버깅을 다루고 마이크로소프트 디버거와 서드파티 툴을 사용하는 법을 소개한다.

실제 해결책을 신속히 찾는 데 도움을 주고자 이 책은 실질적인 디버깅 시나리오로 구성돼 있으며, 전문 개발자가 직면하는 복잡한 디버깅 역경을 조명하려고 세부적인 코드 예제를 제공한다. 핵심 윈도우 운영체제 개념에서부터 보안과 윈도우 비스타, 64비트 디버깅에 이르기까지 부각되는 주제를 적절한 수위로 심도 있게 다룬다.


[ 이 책의 대상 ]

소프트웨어 개발자는 물론이고 윈도우 깊숙한 내부에서 실제 어떤 일이 일어나는지 궁금한 사람 누구에게나 도움이 될 내용을 다룬다. 기술적으로 고급 시스템 엔지니어만을 위한 책이라고 생각할 수도 있지만 실상은 그렇지 않다. 이 책은 개발자들 사이에 떠도는 선입견을 제거하는 것이 가장 큰 목표다. 여러 이유로 인해 많은 소프트웨어 엔지니어는 자신들이 작업하고 있는 소프트웨어와 운영체제 간에 일종의 마법 같은 관계가 있다고 믿는다. RPC/COM이나 윈도우 힙 관리자 같은 운영체제 컴포넌트를 분석해야 하는 문제가 발생할 때 개발자가 품은 선입견은 문제 해결에 큰 도움이 될 수 있는 정보를 얻기 위한 윈도우 내부 조사를 방해한다. 이 책을 효과적으로 활용하려면 선입견을 없애는 법부터 배우고 이면에 마법이 존재하지 않는다는 마음가짐을 지녀야 한다. 핵심 윈도우 컴포넌트를 독자 제품의 확장으로 간주해야 하지 독립적이고 마법적인 계층으로 여겨서는 안 된다. 윈도우 컴포넌트도 다른 누군가가 작성한 단지 코드일 뿐이다. 독자가 이 경지에 올라섰다면 가히 윈도우 디버깅에 정통할 첫 단계를 내디딘 것이다.


[ 이 책의 구성 ]

1부. 개요
1부에서는 기초 내용을 다루며 툴과 디버거의 개요를 통해 디버거의 기본적인 사항을 알려준다. 윈도우 디버거에 이미 익숙하더라도 귀중한 많은 정보가 들어 있으므로 대강이라도 살펴보기를 권장한다.

2부. 디버깅 응용
윈도우 디버거를 사용하여 일반적인 프로그래밍 실수를 분석할 기회를 제공한다. 각 장에서는 메모리 손상과 메모리 누수, RPC/COM과 같은 특정 부류의 문제에 중점을 둔다. 각 장은 윈도우 컴포넌트와 관련 있는 일반적인 프로그래밍 실수를 예시하는 몇 가지 시나리오에 수반되는 해당 윈도우 컴포넌트를 간단히 살펴보고 시작한다.

3부. 고급 주제
3부는 포스트모템 디버깅과 64비트 디버깅, 윈도우 비스타의 기본적인 사항 등과 같은 주제를 논하는 장으로 구성해 전반적으로 고급 내용을 다룬다. 이들 장의 목표는 각 영역에 대해 철저한 내용을 제공하는 것이 아니라 설명한 주제를 독자가 시작할 수 있는 정도의 기본적인 사항을 제공하는 것이다.


[ 추천의 글 ]

소프트웨어에는 “단순화”라는 한 가지 목표가 있다. 최적화하고 자동화할 수 있는 절차와 좀더 효율적으로 저장하거나 처리할 수 있는 데이터가 존재한다면 소프트웨어는 그 일을 이행하기 위해 개입한다. 단순화를 한다고 해서 원래대로 복원(undo)하는 데 복잡성을 야기하지 말아야 한다. 따라서 최소의 사용자 관여로써 설치되어야 하며 계속해서 여타 애플리케이션과 여러 곳의 데이터와 서비스를 통합하고 소프트웨어와 하드웨어 환경 변화에 탄력적으로 대응해야 한다. 대부분의 경우 소프트웨어는 신비하게 그냥 동작한다.

하지만 엔드 유저와 관리자의 경험을 단순화하려고 노력하는 동안에 소프트웨어는 더욱 더 복잡해졌다. 소프트웨어가 다루는 데이터 양이든지 소프트웨어가 통신하는 애플리케이션 수, 소프트웨어의 내부 병렬화 정도 또는 소프트가 자신이 실행되는 스택에서 직간접으로 임포트하는 API이든 간에, 많은 소프트웨어의 명료한 단순성은 미묘한 타이밍 문제와 의존성, 소프트웨어 계층 간 또는 종종 상이한 애플리케이션과 심지에 컴퓨터에 걸쳐 있는 가정을 숨겨준다.

여러분이 소프트웨어를 개발하고 테스트, 지원하는 방법을 배우기 위해 이 책을 읽고 있다면, 근본 원인을 조사하고 수정을 책임지고 있는 변경이 잦은 소프트웨어의 많은 부분에서 이미 문제에 직면하고 있을 것이다. 이런 시도에서 성공하려면 무엇보다도 최대한 신속하고 효율적으로 문제의 원인을 파악해야 한다. 그러기 위해선 무엇을 그리고 어디를, 어떻게 살펴볼지를 알아야 한다. 결국, 툴을 자유 자재로 사용하고, 특정 부류의 실패에 대해 어떤 툴이 가장 효과적인지, 그리고 문제의 원인을 신속히 좁히기 위해 각 툴의 특성과 기능을 적용하는 법을 알아야 한다.

대부분의 경우 윈도우 애플리케이션의 문제를 조사하고 디버깅하는 법을 배우는 것이 단지 선택사항이었지만 애플리케이션 실패를 디버깅할 때에 애매한 툴이나 시나리오 특정적인 디버거 명령에 따라 즉시 문제를 이해할 수도 있고 문제를 파악하는 데 여러 시간 또는 심지어 성공하지도 못하면서 며칠을 허비할 수도 있다. 이것이 바로 이와 같은 책이 그 가치를 발휘하는 이유다.

이 책에서는 통합된 지식과 수년 간에 걸친 저자와 마이크로소프트 고객 지원 서비스, 윈도우 제품 및 툴 개발 팀의 경험을 독자에게 모두 공개했다. 윈도우 힙 관리자가 버퍼 오버플로우 행위에 영향을 주는지 또는 DCOM 행(hang)의 원인 조사에 어떤 디버거 익스텐션 명령을 사용해야 하는가와 같은 주제를 배우기에 가장 적절한 책이라 하겠다. 직접 작성한 윈도우 애플리케이션과 디바이스 드라이버를 10년 넘게 디버깅해왔지만, 이 책에서 내가 이미 사용하고 있는 것은 물론이고, 아직 접해보지 못한 새로운 기법과 툴, 디버거 명령을 배웠다.

우리 모두는 수입과 명성을 디버깅 방법에서 얻는 것이 아니라 얼마나 신속하고 정확하게 디버깅을 하는가에 따라 달려있다. 독자가 윈도우 애플리케이션을 수 년 동안 해왔든지 막 시작했든지 간에 두 저자는 독자의 버그 사냥 여정을 잘 준비해 줄 것이다. 즐거운 여행이 되기를 바란다.

Mark Russinovich
기술 펠로우, 플랫폼 & 서비스 부서
마이크로소프트

저자/역자 소개

[ 저자 서문 ]

얼마 전 작업 중에 직면한 매우 난해한 문제에 대해 얘기를 나누었다. QA팀에서 제품에 대한 스트레스 테스트를 진행했는데 4, 5일마다 크래시가 발생하곤 했다. 생각할 수 있는 한도 내에서 크래시를 디버깅했고 원인을 파악하기 위해 집중적인 코드 검토를 했지만 본질에 접근할 충분한 정보를 얻을 수 없었다. 소득없이 몇 주를 허비한 후에 다른 접근법을 찾기 시작했다. 복도에서 담소를 나누는 중에 누군가가 우연히 gflags 툴을 언급했다. 우리는 이 툴을 전혀 들어 본 경험이 없어서 크래시의 본질을 파악하는 데 어떻게 도움을 받을 수 있는지를 알아보기 시작했다. 불행히도 이 툴을 배우는 과정은 다소 어려웠다. 먼저 툴에 관한 정보를 찾기가 만만치 않았다. gflags 툴에 딸린 참고 문서에 많은 정보가 있었지만 실제로 시작하는 법을 이해하기가 어려웠다. 기본적인 참고 지침이 없다면 해당 툴을 사용할 가망성이 없다는 것을 금방 알아차렸다. 그래서 이 툴을 언급했던 사람에게 지침이 될 만한 문서나 조언을 알고 있는지를 물어보기로 했다. 그는 툴에 대한 간단한 설명을 해주었으며 더 중요한 것은 이 툴을 가지고서 광범위하게 작업을 수행했던 사람들을 알려주었다. 소개해준 사람들과의 유익한 대화를 나누고 점차로 이 툴에 대한 개념을 이해하기 시작했다.

우리가 크래시의 본질에 도달했을까? 그렇다. 사실 특정 문제를 겨냥한 스트레스 테스트를 수행하는 동안 오류 코드를 찾고 수정하기 위해 코드 검토에 단 한 시간 정도만 걸릴 정도의 수준으로 툴을 활성화시켰을 뿐이다. 처음부터 gflags 툴과 그 사용법을 알았었더라면 수 주간의 작업을 절약할을 수 있었을 것이다. gflags 툴을 알고부터 오류 코드의 문제해결 시도에 툴의 사용법을 보다 더 이해하기 위해 많은 시간을 투자했다.

다년 간에 걸쳐 윈도우 디버거와 툴은 계속 발전해 점점 강력해져 왔다. 현재 이용 가능한 기능(시간 절약도 가능하게 해주는)은 매우 뛰어나다. 이해할 수 없는 부분은 수 년이 지났지만 네이티브 디버거와 툴은 여전히 소수의 개발자만이 알고 있다는 사실이다. 이런 툴이 존재한다는 것을 알고 있는 극소수의 개발자도 우리가 몇 년 전에 겪은 것과 유사하게 툴을 배우는 고통을 거쳐야 한다는 것이다. 저자는 마이크로소프트 엔지니어(어떤 이는 이 툴을 작성했다)와 일하는 호사스러움을 다행히 누렸지만 이런 기회가 없다면 기대에 찬 많은 개발자가 희망을 잃고서 이 툴로부터 도움을 전혀 받지 못 할 것이다. 배울 수 있는 자료가 부족한 이런 불행한 문제가 종국에는 문제 해결을 위한 좋은 기회가 된 것이며 그래서 이 책을 쓸 생각을 하게 된 것이다. 개발자에게 필요한 지식을 얻도록 할 수 있는 핵심은 디버깅 툴의 상세한 사항을 철저히 설명하는 간결한 정보를 모아서 제공하는 것이다. 지금 보고 있는 이 책은 이런 역할을 할 것이며 3년에 걸쳐 집필되었고 지난 15년 간의 디버깅 경험의 축적물이다.

이 책을 우리가 집필하면서 경험한 즐거움을 독자들도 읽으면서 느끼길 바란다. 이 책은 독자 여러분을 소프트웨어 문제해결과 디버깅을 매우 효과적으로 할 수 있는 실로 놀라운 세계로 안내할 것이다. 이 책에서 기술한 툴의 사용법과 기법을 안다는 것은 컴퓨터 분야의 작업에 중요한 부분이며 소프트웨어의 가장 난해한 몇몇 문제를 매우 효과적으로 해결하는 법을 가르쳐 줄 수도 있다.


[ 저자 소개 ]

Mario Hewardt
마이크로소프트의 수석 설계 엔지니어로서 윈도우 시스템 레벨의 개발 분야에서 지난 9년간 광범위하게 개발에 관여했다. 윈도우 98부터의 5번에 걸친 윈도우 출시 동안에 서버와 데스크탑 관리 분야의 작업을 주로 했으며, 제품의 신뢰성과 견고성, 보안성을 확보하는 데 주력했다.

Daniel Pravat
마이크로소프트의 수석 설계 엔지니어로서 다수의 윈도우 출시에 있어서 여러 윈도우 컴포넌트를 작성하는 데 주도적으로 관여했다. 마이크로소프트에 합류하기 전에는 컴퓨터 기반의 전화 통신 서버를 위한 전자 통신 소프트웨어를 개발했었다. 모든 소프트웨어 애플리케이션은 신뢰성이 있어야 하며 예측 가능해야 하고 효율적이라야 한다고 믿는 사람이다.


[ 옮긴이의 말 ]

사람은 무엇으로 사는가?
톨스토이는 이 질문을 통해 이 시대를 살아가는 우리에게 한 번쯤은 자신을 반추해볼 기회와 답을 주고 있다. 저자는 가난한 구두 제조업자 세묜에게 하나님의 벌을 받아 세상에 내려온 천사 미하일의 눈을 통해 다음의 세 질문에 대한 답을 구하게 한다.
가난에 찌든 사람으로부터 도움을 받은 미하일은 “인간의 내면에는 무엇이 있는가?”에 대한 답으로 사랑이 사람의 내면에 자리 잡고 있음을 깨닫고, 한치 앞도 볼 수 없는 인간의 우둔함에서 “인간에게 허락되지 않은 것은 무엇인가?”에 대한 대답으로서 인간은 앞을 바라보는 지혜가 부족함을 깨닫고, 다른 사람의 자식을 거두는 이웃으로부터 “사람은 무엇으로 사는가?”에 대한 답으로 사랑의 소중함을 깨닫게 된다.

개발자는 무엇으로 사는가?
현란한 코딩의 즐거움 아니면 복잡한 수학적 알고리즘을 사용하는 현학적 우월감 또는 로우 레벨의 시스템 프로그래밍에 대한 즐거움인가? 사실 이 정도의 개발자라면 자신이 원하는 분야의 프로그래밍을 하면서 그래도 많은 것을 누리는 행복한 편에 속한다고 할 수 있다. 하지만 진정으로 개발자의 즐거움은 모름에 대한 지혜를 추구하고 새로운 앎에 대한 식지 않는 열정을 즐길 수 있는 여유에서 온다고 여겨진다.

여러분은 일상에서 항상 원인이 모호한 메모리 손상, 프로세스 행, 힙과 스택 손상, 보안 문제, 프로세스 크래시, 동기화 문제, 자원 누수, 미묘한 타이밍 문제 등과 같은 곤란을 겪고 있을 것이다. 이런 문제에 대하여 최대한 신속하고 효율적인 방식으로 문제의 범위를 줄이고 정확한 원인을 파악하고 해결책을 강구할 수 있어야 한다. 결국 문제를 인식하고 분류할 수 있어야 하며 각 문제에 대하여 가장 효과적인 툴을 선택하고 필요하다면 분석을 위한 툴을 직접 작성할 수 있어야 하며 특정 부류의 문제에 대한 디버깅을 위한 시스템 조율이 가능해야 하며 효과적인 디버깅 환경을 구축할 수 있는가 하는 문제로 귀결된다.

이 책에서는 앞서 언급한 이런 문제에 대한 철저하고도 경험을 바탕으로 한 저자의 노하우가 고스란히 담겨있다. 체계적이며 심도 있는 디버깅 기법을 풍부한 예제를 통해 매우 간결하게 문제를 해결하는 절차를 예시해 줌으로써 실전에서 부담없이 적용 가능하다. 여러분이 응용 프로그램이나 시스템 프로그램, 서버/클라이언트 프로그램, COM 같이 어떤 분야에서 개발을 하든지 간에 이 책에서 예시된 다양한 툴과 포괄적이고도 명료한 기법을 통해 난해한 문제를 진단하고 해결할 수 있을 것이다. 여러분은 역자와 마찬가지로 이 책을 통해 진정한 개발의 즐거움을 누릴 수 있을 것이다.


[ 옮긴이 소개 ]

김점갑
경북대학교 컴퓨터 공학과를 졸업한 후 삼성전자에서 GNU 컴파일러를 기반으로 ARM CORE 컴파일러 포팅/개발을 했다. 이후 하제소프트를 거쳐 데브구루를 공동으로 창업하여 다양한 디바이스 드라이버를 개발했으며, 다수의 드라이버 강의 세미나와 교육을 진행했다. 현재는 안철수 연구소에서 보안 관련 시스템 프로그램 개발 업무에 매진하고 있다.

목차

목차
  • 1부 개요 1
  • 01장 툴 소개 3
    • 누수 진단 툴 4
    • 윈도우 디버깅 툴 7
    • UMDH 9
    • 마이크로소프트 애플리케이션 베리파이어 9
    • 전역 플래그 16
    • 프로세스 익스플로러 22
    • 윈도우 드라이버 킷 24
    • Wireshark 27
    • DebugDiag 27
    • 정리 28
  • 02장 디버거 소개 29
    • 디버거 기본 30
    • 기본적인 디버거 작업 45
    • 원격 디버깅 109
    • 디버깅 시나리오 118
    • 정리 121
  • 03장 디버거 해부 123
    • 유저 모드 디버거의 내부 124
    • 타겟 제어 168
    • 정리 178
  • 04장 심볼과 소스 파일의 관리 179
    • 디버깅에 필요한 심볼 관리 180
    • 디버깅 용도의 소스 파일 관리 188
    • 정리 195
  • 2부 디버깅 응용 197
  • 05장 메모리 손상 1 - 스택 199
    • 메모리 손상 탐지 201
    • 스택 손상 209
    • 정리 258
  • 06장 메모리 손상 2 - 힙 259
    • 힙이란 259
    • 힙 손상 281
    • 정리 315
  • 07장 보안 317
    • 윈도우 보안 개요 318
    • 보안 정보의 출처 329
    • 보안 검사의 방법 334
    • 클라이언트-서버 애플리케이션에서 신분 전파 335
    • 시스템 경계에서의 보안 검사 339
    • 보안 실패 조사 340
    • 정리 378
  • 08장 프로세스 간의 통신 379
    • 통신 메커니즘 380
    • 로컬 통신 문제 해결 382
    • 원격 통신 문제 해결 396
    • 부가적인 기술 정보 422
    • 정리 426
  • 09장 리소스 누수 427
    • 리소스란 427
    • 하이레벨 절차 428
    • 리소스 누수의 재현성 433
    • 핸들 누수 434
    • 메모리 누수 459
    • 정리 492
  • 10장 동기화 493
    • 하이레벨 절차 504
    • 동기화 시나리오 509
    • 정리 549
  • 3부 고급 주제 551
  • 11장 커스텀 디버거 익스텐션 작성 553
    • 디버거 익스텐션 소개 553
    • 디버거 익스텐션 예제 556
    • 정리 594
  • 12장 64비트 디버깅 595
    • 마이크로소프트 64비트 시스템 595
    • 윈도우 x64의 변경사항 603
    • 정리 630
  • 13장 포스트모템 디버깅 631
    • 덤프 파일 기본 632
    • 덤프 파일의 사용 645
    • 윈도우 오류 보고 653
    • 기업 오류 보고 683
    • 정리 690
  • 14장 강력한 툴 691
    • 디버그 진단 툴 691
    • !analyze 익스텐션 명령 699
    • 정리 708
  • 15장 윈도우 비스타 기초 709
    • 1장: 툴 소개 710
    • 2장: 디버거 소개 712
    • 6장: 메모리 손상 - 힙 부분 717
    • 7장: 보안 723
    • 8장: 프로세스 간의 통신 736
    • 9장: 리소스 누수 737
    • 10장: 동기화 737
    • 11장: 커스텀 디버거 익스텐션 작성 741
    • 13장: 포스트모템 디버깅 741
    • 정리 745
  • 부록 A 애플리케이션 베리파이어 테스트 설정 747
    • 예외 747
    • 핸들 747
    • 힙 748
    • 락 757
    • 메모리 759
    • 스레드 풀 762
    • TLS 763
    • 파일 경로 764
    • HighVersionLie 765
    • 인터랙티브 서비스 767
    • KernelModeDriverInstall 768
    • 자원 부족 시뮬레이션 769
    • LuaPriv 770
    • DangerousAPIs 774
    • DirtyStacks 775
    • TimeRollOver 775

관련 블로그 글

디버깅 삽질은 이제 그만! 『실전 윈도우 디버깅』
사용자 삽입 이미지
실전 윈도우 디버깅
애플리케이션에서 시스템 프로그래밍까지
윈도우 프로그래밍 오류 분석과 툴 활용 기법

Mario Hewardt, Daniel Pravat 지음 | 김점갑 옮김
840쪽 | 46,000원 | 2008년 10월 7일 출간 예정

정확하고 오류 없는 프로그램을 짜는 건 모든 개발자의 로망 아닐까요. 하지만 흠없는 인간 없듯이 세상 일이 모두 그러할진대, 버그 없는 완벽한 프로그램이란 참으로 요원한 이상이며 벌레를 잡는 일조차도 수월치 않음이 개발자의 현실일 것입니다.

윈도우 애플리케이션부터 시스템 프로그래밍까지 메모리(스택, 힙) 손상과 자원 누수, 크래시 분석, 보안 문제, 서버/클라이언트, 동기화 문제 등의 근본 원인을 파악하는 기법과 문제 탐지에 사용할 수 있는 강력한 디버깅 툴의 활용법과 전용 디버깅 명령 작성법을 소개한다.

또한 회사에 디버깅이 가능한 시스템(소스 서버와 심볼 서버)을 구축하는 법과 윈도우 오류 보고와 기업 오류 보고 시스템을 구축해 자동으로 오류를 전달받고 패치하는 메커니즘까지 다루는 실전 윈도우 디버깅에 대한 체계적이고 심도 있는 완벽 가이드다.
저자 서문에도 나오지만 이 책은 그야말로 저자들의 오랜 삽질과 경험 끝에 자신들이 겪은 그 수많은 시행착오를 다른 이들은 절대 겪지 않게 되길 바라는 충심에서 태어난 책입니다. 어느 날 저자들은 스트레스 테스트 중에 발생하는 크래시 때문에 골머리를 앓고 있었습니다. 그러던 중 누군가가 알려준 gflags 툴을 알게 됐고, 문제 해결은 멀지 않아 보였습니다. 하지만 툴을 배우고 사용법을 익히는 과정은 길고도 험난했습니다. 맛있는 음식을 만들 수 있는 끝내주는 재료를 눈앞에 두고도 복잡다난한 요리도구의 사용법을 몰라 그림의 떡처럼 앉아있는 것이나 다름 없었던 게죠.

세상에는 정말 수많은 디버깅 툴이 있습니다. 이거 하나면 버그들은 가볍게 잡아내어 오류 없는 코드를 만들 수 있다고 하지만, 그럼 뭐하냐구요. 제대로 쓸 수 있는 방법을 모르는데. 이 책에서는 NTSD와 CDB, WinDbg, KD, ADPlus 등 강력한 최신 윈도우 디버깅 툴을 제대로 활용하는 방법을 알려줍니다. 아울러 각 툴의 익스텐션(extension) 명령을 적절하게 활용해 버그를 쉽고 빠르게 찾아내서 수정할 수 있는 방법을 알려주고 있습니다.

기존 디버깅 책에서 가장 취약했던 부분은 디버깅 방법을 알려주면서 그냥 눈으로만 확인할 수 있다거나 이론만을 나열함으로써 실제 오류 사례와 연관시켜 이해하기가 힘들었다는 점이었을 것입니다. 이 책에서는 (메모리, 스택, 힙 손상 등) 각종 메모리 관련 버그, 보안이나 프로세스, 통신 등에서 발생할 수 있는 각종 버그, 윈도우 프로그램에서 흔히 접할 수 있는 애플리케이션 행(hang) 등 정말 윈도우 프로그래머라면 늘상 접하는 수많은 오류 상황을 저자들이 사례로 만들어 소스코드를 보여줌으로써, 독자들이 자신의 심볼서버, 소스서버에서 돌려 실제로 직접 확인해볼 수 있게 했습니다.

또한 저자들이 공개한 웹사이트(http://www.advancedwindowsdebugging.com)
에서 모든 샘플 코드와 바이너리를 올려놓았으며, 독자들이 디버깅 세션을 시도할 때 해당 바이너리에 대한 심볼들을 다운로드하지 말고 디버거 심볼 경로를 이 책의 심볼 서버로 지정하면 원격 심볼로써 디버깅할 수 있게 했습니다.

(몇몇 출판사가 번역권을 탐냈다던) 이 좋은 (그리고 매우 두꺼운 -0-) 책을 훌륭히 번역해주시고 많은 조언 아끼지 않으신 안철수 연구소의 김점갑 팀장님께 감사드립니다. 아울러 저희를 도와 좋은 책 열심히 만들어주시는 박창기 실장님께도요.

실전 윈도우 디버깅』은 지금 YES24, 교보문고, 강컴, 인터파크, 알라딘 등에서 예약판매중입니다. 다음 주 화요일, 10월 7일이면 곧 출간되오니 윈도우 디버깅에 관심 있는 분들은 어서 서둘러보시죠. 모 서점에서는 벌써부터 뜨거운 반응이 저희에게도 전해오고 있다고 하니 모쪼록 독자분들의 좋은 평을 받았으면 좋겠습니다. :)
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p519 아래에서 6행 ]
스레드가 그냥 종료할 것이다. 하지만 절대로 그렇지 않다.
→ 스레드가 그냥 종료할 것이다. 이 경우 서드-파티 코드를 호출하기 전에 획득한 임계영역을 벗어났는가? 하지만 절대로 그렇지 않다.