티스토리 뷰

기록/독서

Debugging Applications

JOHNPARK82 2006. 7. 19. 13:46
Debugging Applications

ISBN : 8956741794

작년에 처음으로 알게된 책인데... 이번에 읽기 시작합니다. 중간중간에 기억에 남는 부분이나 필요한 부분은 이 포스트를 통해서 내용을 추가해 갈 생각입니다.

2006/07/18 210p 가량 읽었음
앞 부분의 내용은 디버깅에 대한 개념과 어떤식으로 프로그램의 디버깅을 접근해 가는지에 대한 필자의 입장이 써져있다. 또한 필자는 자신이 가진 이런 디버깅의 일련화된 루틴을 밟아서 이 책을 읽는 프로그래머들이 디버깅이라는 작업에 임해주길 바라는 것 같다는 인상을 풍긴다.
이 부분까지는 직접적으로 상세한 기술적인 내용을 언급하려고 하지는 않는다. 단지 윈도우즈 환경에서 사용할 수 있는 적극정인 디벅깅 수단인 Assertion, Trace, Verify 와 같은 도구를 이용해서 방어적(저자가 생각하는) 디버깅 작업을 미연에 막기위한 노력에 대해서 많은 지면을 할애한다.

Assertion : 파라메터 유효성 검사, 루틴이 가정하는 사실에 대한 검사, FALSE Assert 되었을 경우 해당 이유를 프로그래머가 알 수 있도록 하기위한 테크닉(!, && 이용 스트링), side-effect 를 조심하라.
Trace : 기본적으로 printf와 동일하다.
Verify : 리턴값에 대한 검사에만 이용한다.

그리고 이제 문제발생시 이용이 가능한 디버거에 대한 이야기를 시작한다. 디버거는 하나의 프로그램이며, 의외로 많은 사람들이 이런 디버거를 프로그램으로 생각하지 못하는 경향이 있다. 필자는 (디버거) <-> (디버기) 의 관계에 대한 이야기를 하며, 윈도우즈 환경에서 이용가능한 두가지 디버거의 종류 유저-레벨 디버거, 커널-레벨 디버거에 대한 이야기를 잠시한다. 그리고 MinDBG, WDBG, Soft-Ice, KD, WinDbg, .Net Debugger 등과 같은 디버거에 대한 이야기를 마구해대기 시작한다. 이 곳의 글을 읽으면 윈도우 환경에서 디버거라는 것이 대충 어떤 식으로 구현되는지 어느정도 짐작할 수 있다. (-_- 역시나 윈도우즈는 모든 걸 OS가 지원한다.)
단지 여기서 약간 주목할 만한 것은 Soft-Ice 라는 누메가의 디버거인데... 이놈은 좀 특이한 특징을 가진다. 보통 커널 레벨 디버거는 OS 커널인 NTOSKRNL.EXE가 지원하는 기능을 이용해서 클라이언트 시스템을 이용해서 디버깅하기 마련인데 이놈은 이런 구조가 아닌 말그대로 로컬에서 커널레벨 디버깅이 가능한 놈이랜다. (S-ICE만 본 나로서는 -_- 다른건 잘 몰랐기 때문에 약간 의외였다는 사실)
그밖에 재미있는 디버거는 KD. 재미로 읽어보면 재미있음. -_-;

2006/07/18 300p 가량 읽었음
간단한 디버거의 구조를 보여주고 저자가 직접 작성한 MinDBG라고하는 디버거의 구조에 대해서 설명한다. 저자는 이 디버거의 전체 소스를 CD에 담았다고 말하는 것 같은데.. (CD 안봤다 -_-;; ) 이 디버거를 작성한 이유가 자기가 하도 디버거 작성에 대한 이메일을 많이 받아서 예제 프로그램이 필요하겠다는 생각에서 였다고 한다. (한마디로 귀찮아서라는 -_-;; 꼬우면 책사서 보라는 말같음. ㅋㅋ)
여하튼 그 설명을 끝나면 5, 6자엥 걸쳐서 저자 생각에는 현존 최고의 디버거라고 생각되는 .NET 디버거를 잘 다루는 방법에 대한 설명을 시작한다. .NET 디버거 굉장히 우수하다는 칭찬일색이며, 사실 BP를 다루는 점에 있어서 내가 모르던 부분이 몇몇 소개되었기 때문에 나름대로 재미있게 보았다. (gdb 에서도 가능하지만 멋진 UI를 바탕으로한 이 디버거는 정말 편하고 강력한 기능을 가진 것 같았다.)
.NET 디버거를 잘 다루는 방법으로 몇가지를 소개하고 있는데... 한가지는 디버거 Intellisense 기능을 최대한 활용하라는 것이 었고, 직접 작성한 함수를 이용해서 Watch 의 활용을 극대화하라는 말로 요약되는 것 같다.

덧붙임) 이 저자 아주 재미있는 사람같습니다. -_-; 번역된 글이어서 그리고 영어를 모국어로 하지 않는 사람이라서 그런지 확 오지는 않지만... 중간중간에 간단한 조크를 날려주는데.. 완전 코미디입니다. -_-;; 예를 들자면 JFX라는 GUI툴킷을 간단히 작성했는데 이걸 예전에 Jeffrey Ritcher 와 같이 작성했는데... 제프리는 이 툴킷의 이름을 Jeffrey Frameworks라고 하고 싶겠지만 자기는 John Frameworks라고 부른다는 둥... -_-;;