데스크탑 어플리케이션 개발시 잡기 힘든 버그 중 하나가 가끔씩 일어나는 크래쉬.. 언제 죽는다, 재현을 해보기 힘든 비정상 종료상황이 발생하는 경우는 죽는 상황을 어떻게 하면 재현할 수 있다는 정보를 수집하기가 상당히 어려운 부분이 있다..

다행히 윈2000 이상의 윈도우 시스템에서는 Dr Watson 이라는 꽤 괜찮은 기본 디버거가 윈도우 시스템에 기본 탑재가 되어 있다.. 메트 피에트릭이 소개한 SEH 처리용 클래스를 활용하는 방법 보다는 훨씬 더 많은 디버깅 관련 자료를 제공해주는 덤프를 작성해 줄 수 있기 때문에 Dr Watson을 활용하는 방법이 좋다고 생각한다.. (SEH 처리용 클래스에 관련된 보다 더 많은 정보 참고)

사용자 삽입 이미지

실행시킨 모습은 위와 같은데, 로그파일과 크래쉬 덤프를 위와 같이 세팅한 대로 남겨준다.. 이렇게 남은 정보는 위에서 이야기한 기사에 소개된 SEH 처리용 클래스가 남기는 정보보다 훨씬 더 유용한 정보들을 많이 남겨준다.. 하지만, 위 그림과 같이 저장되는 경로만 내가 원하는 곳으로 저장해둔다고 동작하는 것은 아니다.. 잊지말고 반드시 해줘야 하는 작업, 하지만 막상 하려면 명령어가 생각나지 않는 작업을 해줘야 한다..

명령행에서 "drwtsn32 -i" 라고 쳐줘야 Dr Watson이 기본 디버거로 설정이 되면서 정보를 남겨주게 된다..

그럼 이 정보를 제대로 활용하는 방법은? 인터넷에서 검색을 통해 더 좋은 자료를 찾을 수도 있겠지만, 지금까지 내가 알기로는 Debugging Applications라는 책이 가장 좋은 활용법을 알려준다..

언제 죽는지 모르는 버그에 시달리고 있다면, 개발자 자신의 PC의 세팅을 이렇게 남겨두면 어떨까?

더 나아가 우리가 배포하는 사용자 PC의 환경도 이렇게 바꿔두면 어떨까? 사실 사용자의 PC 환경을 우리가 만든 어플리케이션이 맘대로 조작한다는건 상당히 기분 나쁜 일일 수도 있다.. 더구나 내가 만든 프로그램의 사용자 역시 프로그래머다.. 그런데 그 사람이 사용하는 기본 디버거가 따로 있는데, 이게 Dr Watson으로 어느날 갑자기 바뀌었다.. 이건 좀 아니긴 하다.. 하지만, 많은 경우에 기본 디버거를 바꿔버리고, 우리가 원하는 위치에 크래쉬 덤프를 남기고 그것을 우리가 수집할 수 있다면 여러 사용자 환경에서 발생하는 오류에 대한 대처에 더욱 능동적일 수 있지 않을까?

최소한 사용자 동의를 얻어 진행할 수 있는 클로즈 베타, 혹은 베타 서비스 기간에는 이를 적용하여 크래쉬에 대한 정보를 적극적으로 수집하는 것도 좋은 방법일 것이다..


추가내용 : jrogue님이 알려주신 주옥같은 정보..

1. Dr Watson은 윈도우 설치시 사용할 수 있는 기본 디버거.. 별도로 세팅하지 않아도 크래쉬 정보를 수집할 수 있다.. 난, 개발툴을 설치했기 때문에 Dr Watson이 기본 디버거가 아니었던 것이다..

2. Dr Watson에 관련된 좋은 정보

3. Dr Watson의 로그파일을 점검하는 방법에 관한 정보

음.. 이쯤되면, 무식한 덕에 제목을 완전 잘 못 달았음을 알 수 있다.. Dr Watson은 원래 윈도우즈의 기본 디버거였던 것이다.. 이름은 아마도 셜록홈즈 소설에 나오는 바로 그 왓슨 박사에서 따온 듯 하다..

Posted by 미친병아리