Win Dbg


1. 일반 #

1.1. 명령 #

1.1.2. 주요 명령 #

펼치기

1.1.3. 자주 사용하는 명령 #

1.1.3.1. Stack Trace 관련 #
1.1.3.2. Thread 관련 #
  • ~ : thread 목록 보기
  • ~#s: #번째 thread로 focus(?) 변경
  • ~#k: #번째 thread의 스택 상황 보기
  • ~*kvn: 전체 스레드들의 전체 콜스택

1.1.3.3. Breakpoint 관련 #
  • bu: 심볼에 breakpoint 설정 -- bu module!symbol name
    • ex) bu USER32!MessageBoxW
  • bl: 설정된 브레이크포인트 목록 보기
  • bc: 주어진 번호(bl로 봤을때..)의 브레이크포인트를 제거
  • ba: address에 breakpoint 걸기 -- ba Access Size Address
    • ex) ba e1 0xXXXXXXXX -> e는 execute이고 e일때 Size는 반드시 1이어야 함.

1.1.3.4. Disassemble 관련 #
  • uf: symbol을 disassemble
    • ex) uf win!WndProc+0x19b
  • u: address를 disassemble
    • ex) u 0xXXXXXX L(-)# -- #만큼 이후(이전) 코드 disassemble

1.1.3.5. Memory 관련 #
  • r: 현재 스레드의 register 상태 보기
  • !teb: 현재 스레드의 thread environment block
  • du: unicode 문자열
  • da: ASCII 문자열

1.1.3.6. Symbols 관련 #
  • .sympath+: 심볼 패스 추가 ex) .sympath+ c:\mysymbols
  • lm: 현재 로드된 심볼의 목록
  • lmvm: 특정 모듈 자세히 보기
    • ex) lmvm mydll
  • ld, .reload: 심볼 load/unload관련
    • ex) ld ntdll
    • x: 심볼 목록 보기
      • ex) x USER32!Message* -- Message로 시작되는 User32의 모든 심볼 목록 보기
    • 언로드된 심볼 로드
      • ex) .reload /unl mymodule.dll

1.1.4. 기타 명령 #

  • .tlist: 현재 실행중인 모든 프로세스를 출력. -v 자세히.

1.2. 심볼 설정 #

- MS 기호 서버 경로 http://msdl.microsoft.com/download/symbols
- 웹 심볼 SRV*로컬저장위치*URL
- 추가 경로는 ; 로 구분
- .pd_ 와 같이 compressing된 심볼 파일 경로는 로컬 위치도 SRV*를 사용한다.
- 닷넷 프레임 워크 .ni.dll 기호가 없을 때: Ngen.exe (Native Image Generator)을 이해해야 한다. processor-specific machine code 를 기억하면 된다.
https://blogs.msdn.microsoft.com/devops/2012/12/10/creating-ngen-pdbs-for-profiling-reports/

심볼 설정 예
SRV*D:\ossymbols*http://msdl.microsoft.com/download/symbols;SRV*D:\mysymbolserver;D:\mysymbols
.reload

1.3. 디버거 연결 변경 #

140812.PNG
[PNG image (7.38 KB)]

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

NameTypeData
AutoREG_SZ1 / 0
DebuggerREG_SZ"C:\Program Files (x86)\Debugging Tools for Windows\windbg.exe" -p %ld %e -%ld -g
-p %ld: 크래시 난 프로세스의 PID
-e %ld: 크래시가 발생되어 처리할 디버그 이벤트
-g: 디버거가 실행되는 순간 대기 없이 계속 디버기를 수행할 것

2. 사례 #

2.1. Access violation 분석 #

1. !analyze -v 실행. AV 발생 확인
2. r 마지막 실행하던 메모리 번지와 레지스터 상태 확인. AV가 발생한 원인인 유효하지 않은 메모리 번지 확인
3. dd 메모리번지. 원인이 된 접근하려는 메모리 번지가 정말 유효하지 않은지 확인
4. dv 발생 당시 로컬 변수 확인

2.2. 스레드 분석 #

1. ~ 모든 스레드 확인
2. !teb 스레드주소 의심스러운 스레드 TEB(thread environment block) 확인. StackBase, StackLimit 주소 확인.
3. !dps StackLimit StackBase 스레드 스택 영역 메모리 분석.

3. 기타 #

3.2. 좀 더 간단한 디버거 DbgDiag #

DbgDiag from Microsoft
WinDbg 수준에는 미치지 못하지만 간단한 덤프 디버깅 분석 도구. 복잡한 설정이 필요없기 때문에 비 개발자나 End User 대상일 때 유용할 수 있다.
문제를 파악 할 수 있는 수준에서 일반적인 오류 분석이 가능하나 더 정확한 분석은 WinDbg가 필요할 수 있음.

Quick Start
* Launch the "DebugDiag Analysis" application
* Select the "CrashHangAnalysis" checkbox on the main page
* Drag-and-drop your dump into the "Data files" pane on the main page
* Click "Start Analysis"


이 글에는 0 개의 댓글이 있습니다.