Media Log

WinDbg로 쉽게 배우는 Windows Debugging - 8점
김성현 외 지음/에이콘출판
회사에 처음 들어와서 윈도우즈 유저모드 애플리케이션들을 개발해온지 이제 3년이 조금 넘었다.
얼마전부터는 생전 처음으로 커널 레벨 코드를 작성하게 되었다.

3년이라는 시간은 길다면 길고 짧다면 짧은 시간이지만, 그동안 사용자 레벨 시스템에 대한 많은 부분을 배울 수 있었는데, 커널 레벨은 또 하나의 새로운 세계를 보여주는 느낌이다.

커널 레벨 프로그래밍을 하면서 윈도우즈 시스템의 깊숙한 부분들에 대해서 잘 몰랐던 부분들이 조금씩 명확해지는 기분은 아주 달콤하지만, 잘 설계된 하이레벨 언어들과 라이브러리들을 사용하지 못하고 또 사용자 레벨에서처럼 편하게 디버깅을 할 수 없다는 것은 많은 한숨이 나오게 하는 점이었다.

나는 마치 다시 신입사원 때로 돌아간 것만 같은 느낌인데, 당시에는 Win32 API도 거의 아는 것이 없어서 김상형님의 winapi.co.kr에서 Win32 API와 Window Messages들을 모두 출력해서 출퇴근길마다 읽고, 집에 들어가면 Windows API 정복이나 Windows via c/c++(당시에는 4판이었던), 디버깅 애플리케이션과 같은 좋은 책들을 읽으면서 지식을 쌓을 수 있었다.

반면에 불행히도 윈도우즈 디바이스 드라이버 프로그래밍을 다루는 책들은 그다지 많지 않다. 아니 거의 없다. 책을 쓰기도 어렵거니와, 수요가 워낙 적어서 잘 팔리지도 않을 것이기 때문이다.
그래서 가장 많이 참조하게 되는 것은 결국 MSDN인데, 나는 아직 영어를 정확하고 빠르게 읽을만한 수준이 되지 못해서 이런 한글 책이나 번역서에 항상 감사한다.

블루스크린이 뜨고 덤프를 보고도 문제를 찾아내지 못하면서, 나는 디버깅을 조금 더 잘 할 수 있어야겠다는 생각을 갖게되었는데, 이 책이 내게 아주 많은 도움을 주었다.

특히 Bug Check 0xCE는 바로 그저께 닥친 문제였는데, 이 책을 차근차근 읽으면서 어렵지 않게 해결할 수 있었다. 책을 읽지 않고 코드만 바라봤다면 계속 흰머리만 하나씩 늘어갔을 것이다.

나는 이 책을 이틀동안 읽었는데, 얇은 책이라고는 하지만 기술서적이 이틀동안에 읽혀진다는 것은 그만큼 읽기 편하게 쓰여졌다는 뜻이기도 하다. 물론 예전에 존로빈스의 디버깅 애플리케이션을 읽으면서 배웠던 지식들도 도움이 많이 되었다.

이 책은 대체적으로 쉽게 잘 쓰여졌다만 설명이 부족한 부분들이 몇몇 있고, 덤프 코드와 설명을 빨리 매치 시키기가 어려운 단점이 있다. 만약 덤프 코드 앞에 라인번호을 붙여놓고 라인 번호와 함께 설명했다면 훨씬 읽기가 좋았을 것이다. b0f128a4 어쩌구 하는 어지러운 주소값을 라인번호도 없이 눈으로 찾아야하는 것은 읽는이로 하여금 쓸데없는 집중력을 소비하게 만든다.

어쨌거나 이 책을 다 읽고나서 바로 이틀 전인 그저께 모습보다 나는 훨씬 많이 발전했는데, 이 책의 가격이 좀 비싼감이 들긴 하지만(500페이지 분량에 35000원이다) 내가 얻은 결과에 비하면 충분한 값어치를 하고도 많이 남은 셈이다.

2년여 동안 고생해서 좋은 책을 써주고, 내게 많은 지식을 얻게해준 저자들에게 감사를 표한다.
신고

submit
Debugging Applications for Microsoft .NET and Microsoft Windows - 10점
John Robbins 지음, 서우석 옮김/정보문화사


이 책은 John Robbins의 하나뿐인 명작 시리즈이다.

이 디버깅 시리즈는 총 3판 까지 발행 되었는데, 1판은 Debugging Applications란 이름의 오직 native code만을 다룬 서적이고, 지금 옆에 있는 이 책이 native와 managed 코드를 같이 다루는 2판, 그리고 2006년 말 즈음에 나왔던 것 같은 3판은 오직 관리코드에 대해서만을 다룬다.(그래서 2판이 가장 두껍다.)

그러나 닷넷프레임워크 환경 내에서 프로젝트를 한다고 해도 3판을 선택하기 보다는 2판을 고르는 것이 더 좋을 것이다. 왜냐하면 3판은 번역서가 없기 때문이다^^
이 책을 번역한 서우석씨는 debuglab.com 의 운영자인데, 튼튼한 내공이 있어서 그런지 프로그래밍 서적 번역을 정말 잘한다.( 하지만 이책의 3판은 번역하지 않을 것이라고 들었다. 그래서 재출간판이 나온 것이고 )
이 책의 번역이 엉망이다, 또 다른 책인 Code Complete2의 번역이 엉망이다 하는 사람들이 있는데 아마도 그 사람들의 기본기가 엉망일 것이다. 원서를 읽는 것보다는 100배 정도는 이득이니 영어실력이 부족하다면 꼭 번역서를 구해보라.

이 책 3판을 어쩌면 다른 사람이 번역할지도 모르니 기다려 보는 것도 좋겠지만, 2판에 있는 주옥같은 native 예제들과 설명들을 버리고 가긴 너무 아깝지 않은가. 아무리 닷넷 개발자라 할지라도^^

음, 어쨌뜬 아쉬운 소식 중 하나는 이 책을 읽고 반해 버렸던 존 로빈스가 더 이상 책을 쓰지 않기로 했다는 것이다.
책만 쓰면 인터넷에 여기저기 돌아다니고 하는 것에 어지간히 화가 났던 것 같다.
정말 아쉬운 부분이긴 하지만, 그래서 이 책이 더더욱 아름다운 명서로서 자리매김 하게 될 것 같다.

내가 이 책을 처음 알았던 것은 역시 신입사원 때였다.
(지금 생각해보니, 도대체 학교 다닐 때는 왜 이런 책들을 모르고 소설같은 C#, 자바 이런 책들만 봤는지 모르겠다. 물론 그 책들이 형편없다고 비하하려는 의도는 아니다. 그냥 이런 훌륭한 책으로 학생 때 여유를 가지고 공부하지 못했던게 아쉬울 뿐이다.)

음 어쨌든 신입사원 때, 회사 위키에 누군가가 올려놓은, 오류보고서 정보를 통해 위치를 역추적 하는 글을 읽었는데 도대체가 무슨 말인지 전혀 이해가 되지 않았다.
그 분에게 하나씩 다 물어볼 수도 없고 해서 무슨 책 읽으면 됩니까. 했더니 이 책을 보라고 권해주셨다.( 그분은 사실 카발온라인과 알집을 만든 개발실장님이었다. 신입사원이 가서, 아니 이게 도대체 무슨 외계어를 써논겁니까! 하나씩 차근 차근 설명해주십시오! 할수도 없는 노릇 아닌가. 하하하 )

음 어쨌든 이 책을 읽고 나서는 나도 map 파일과 pdb 파일이 뭔지 알게 되었고, 빌드 할 때마다 버전별로 저런 디버깅 정보들을 자동으로 모아둘 수 있도록 구성해 두었고, 또한 사람들이 비즈하드 전용탐색기를 사용하면서 프로그램이 비정상 종료되었을 때 오류보고서 정보를 보내주면 그 정보들을 보고 프로그램이 어디서 죽었는지 찾을 수 있게 되었다.

물론 이 커다란 책에 단지 충돌주소로 소스코드 위치를 찾는 방법만 나와 있는 것은 아니다.
이 책은 Windows 환경에서 디버깅하는데 필요한 거의 모든 지식을 다룬다.

내가 재미있게 읽고 프로젝트에 유용하게 적용 할 수 있었던 것들은 다음과 같다.

심볼서버 구성,
ASSERT와 TRACE,
경고 없는 코드를 작성하는 방법,
컴파일, 링커 옵션에서 각 스위치들의 의미,
DLL이 로드되다가 충돌 하였을 때 재배치되는 과정과 방지하는 방법,
멀티쓰레드 프로그래밍시에 주의사항,
기타 브레이크 포인트 고급 옵션들.

어떤 Windows 프로그래머들에게도 좋은 책이 될 것이라 확신한다.


신고
  1. 김재호 at 2008.04.30 18:35 신고 [edit/del]

    오 이런, 오늘 강컴에 3판 번역서가 올라왔군요. 5월 15일 출시에 역시 서우석씨 번역이네요^^

    Reply

submit