Windbg에서 조건문 bp
2008/06/18 08:38

MSDN 블러그를 보다 보니...
Windgb로 조건문 bp 사용에 대해 자세한 설명을 해놓았다.
http://blogs.msdn.com/debuggingtoolbox/archive/2008/06/12/special-command-if-and-j-to-use-in-breakpoints-and-scripts.aspx

특정 지점에서 10번째 카운터에서 bp를 잡는 예제를 아래와 같이 써두었는데...

r @$t0 = 0
bp mtgdi!CBallThread::SingleStep "r @$t0 = @$t0 + 1;.if(@$t0 > 0n10){.echo More than 10 times...}.else{ gc }"

누군가 달아놓은 코멘트가 압권...

bp mtgdi!CBallThread::SingleStep 10

딸랑 이 한줄이면 된단다.
하아...


2008/06/18 08:38 2008/06/18 08:38
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • 비밀방문자 2009/06/12 15:24  댓글주소  수정/삭제  댓글쓰기
    관리자만 볼 수 있는 댓글입니다.

  • Crash Dump Analysis 책 발매
    2008/04/16 09:25
    언제가 회사에서 개발자 면접이 있을때 자리를 함께할 기회가 있었다.
    이런 저런 이야기를 하다 디버깅에 대한 이야기가 나왔는데...
    면접자가 말하기를...
    Windbg며 Softice며 쓸 필요가 있냐....코딩을 잘하면 된지...
    그자리에서는 그냥 웃고 말았는데...
    개발자에 있어서 디버깅은 설계와 구현 못지 않은 내공에 대한 기준이다.
    게다가 디버깅이란게 설계와 구현에 관한 만큼 정형화되어 있지도 않기 때문에...
    디버깅의 지식 습득이란게 경험외에는 다른 대안이 없다.
    디버깅은 그만큼 개발자의 경험을 반영한다고 하면 디버깅 능력을 무시 못하겠다.

    그런 의미에서 지금 소개하려는 Dmitry Vostokov라는 개발자가 쓴 Crash Dump Analysis라는 책에 의미가 있다.
    디버깅 전반적인 내용은 아니지만 "Crash Dump 파일 분석"에 대한 실예제 글인데 틈틈히 블러그에 올린 글을 모아놓은 책이다.
    RSS로 구독하여 시간나면 읽어야지 하면서도 읽지 못했는데 책으로 나온다니 반가운 소식이다.
    사용자 삽입 이미지

    사실은 드라이버온라인에 drost라는 분이 이 내용을 번역해서 종종 올리기도 하였는데 어쩌면 한글판도 기대해도 좋을지 모르겠다.
    2008/04/16 09:25 2008/04/16 09:25
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • Woof 2008/04/16 23:41  댓글주소  수정/삭제  댓글쓰기
    전 그냥 가서 사볼까 생각 중이네요.
    그나저나 재미난 얘기도 써있군요.

  • CrashFinder
    2008/02/13 10:10
    회사동료가 help를 요청하길래 얼마전 이야기했던 MAP파일 생성으로 에러 발생한곳 찾기로 문제가 발생한곳을 찾으려고 했더니...
    2005 프로젝트에서 아무리해도 map 파일을 제대로 생성할수 없었다.

    포기할수 없어 구글링을 통해 알아보니...
    CrashFinder 라는 프로그램을 사용하면 굳이 복잡한 과정을 거치지 않아도 쉽게 알수 있다.
    에러가 발생한 곳의 주소를 입력하여 파일명와 에러난 줄번호를 바로 알수있다.
    (초간단 사용예는 이곳 참조, 영문doc)

    CrashFinder 다운받기

    추가로 pdb 파일 생성에 관한 Bugs Layer 기사 참조
    http://www.microsoft.com/msj/0498/bugslayer0498.aspx

    글의 요지는...
    1. 디버그 심볼은 디버그 빌드에서만 생성할수 있는게 아니다. Release 빌드시도 pdb 생성하여 에러 발생시 심신을 편하게 하자.

    설정 방법은...
    cl.exe, C++ tab에서
    /Zi - Debug Info를 Program Database로 설정

    Link.exe, link탭에서
    /DEBUG - generate debuginfo 선택
    /PDB:"파일명" - user program data base 체크 및 이름추가

    2. reversing에 대한 염려도 없다. 프로그램은 약 1kb, pdb 파일이름만 기록

    사용자 삽입 이미지

    PDB 생성하면서 Release 빌드

    사용자 삽입 이미지

    PDB 생성하지 않고 Release 빌드


    차이점은 NB10으로 시작하는 디버그헤더와 pdb path 만 추가되어있다.

    3. dll의 경우 rebase를 통한 로드주소 정리
    Debuggin Applications 책에서도 언급되었던 내용으로 상당수의 dll이 0x10000000에 로드되려하기 때문에 이로인한 부하를 줄이기 위해서 dll별 로드되는 주소를 설정.
    빌드시 설정하여도 되고 rebase.exe라는 유틸을 사용하여도 무방

    4. pdb와 exe 보관
    각 버전에 맞는 pdb와 exe를 보관
    소스관리툴을 사용하고 파일별 버전을 관리한다면 따로 보관하지 않아도 될듯하다.


    결론은...
    릴리즈 빌드시 pdb를 생성해서 배포하고(드라이버는 자동으로 pdb가 생성된다) dll은 시작주소를 기본값(0x10000000)이 아닌 다른 값(Debugging Application 책에 권장방법이 있다)으로 설정한다.
    에러발생시 Windbg를 사용할 여건이 안된다면 CrashFinder로 분석하고 여건이 허락한다면 Windbg를 통해 분석하자.
    2008/02/13 10:10 2008/02/13 10:10
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

    1. Subject: CrashFinder 사용법

      Tracked from 잡동사니 2008/05/05 06:33  삭제

      회사동료가 help를 요청하길래 얼마전 이야기했던 MAP파일 생성으로 에러 발생한곳 찾기로 문제가 발생한곳을 찾으려고 했더니...2005 프로젝트에서 아무리해도 map 파일을 제대로 생성할수 없었..

  • Woof 2008/02/13 10:47  댓글주소  수정/삭제  댓글쓰기
    VS2005 에서 일반 Applicatin의 map 파일 생성은 프로젝트의 속성의 linker 옵션 내의 debugging 탭에서 Amp Exports를 yes로 주거나 /MAPINFO:EXPORTS로 옵션을 주시면 만들어져요. (Geneate Map File 이라는 탭도 있네요.) 맵 만드는게 문제가 아니라 만들어진 맵이 이상하다는 것이려나. 하는 생각이 들지만. :|
    툴이랑 그런 부분은 한번 써봐야겠네요. 잘 봤습니다아. :)
    • hongyver 2008/02/14 08:37  댓글주소  수정/삭제
      아...그런가요?
      몇번 해보다 안되서 구글링 했더니...CrashFinder라는게 눈에 띄더라구요. 그래서 그냥 귀차니즘으로 ^^