WinDbg에서 메모리덤프를 분석할 때 가장 아쉽고 불편하고 짜증나는 부분이 STL 분석이 아닐까 싶습니다.
sdbgext라는 플러그인이 있기는 하지만... 기능도 불편하고 지원하는 VisualStudio 버젼도 2003 뿐이어서 다른 버젼의 VisualStudio에서 빌드한 바이너리는 정확히 분석되지 않는 경우가 많습니다.
사실 STL을 분석할 때 더 편리한 방법이 있는데요... 그냥 메모리 덤프를 VisualStudio에서 열어보는 겁니다.
(메모리덤프는 반드시 WinDbg로 분석해야 한다는 고정관념을 버려~!!)
사실... 아주 쉬워요.
- 메모리덤프를 VisualStudio에서 오픈합니다. (드래그&드랍을 하시든 열기 메뉴로 하시든...)
- 열고 나면 아래와 같이 "Summary" 페이지가 표시되고 "Action" 항목에 "Debug with..." 항목과 "Set symbol Paths"라는 항목이 보이죠. 먼저 "Set symbol Paths"을 눌러서 심볼 경로를 설정해줍니다. (바이너리와 pdb가 빌드된 위치에 그대로 있다면 굳이 설정할 필요는 없겠죠?)
- "Debug with Native Only"를 클릭하여 디버깅을 시작합니다.
그러면 아래의 붉은색 볼드로 박스친 부분과 같이... map의 내용을 GUI로 확인해볼 수 있습니다.
이거야 원.. 너무 쉽죠? ^^a
그런데... VisualStudio 버젼에 따라서 약간 기능 제한이 있습니다.
예를 들어 제가 주로 사용하는 VisualStudio 2010은 다음과 같은 제한이 있습니다.
1. Crash Dump만 분석 가능합니다. (실행중인 상태에서 작업관리자 등으로 작성된 덤프.. 즉, Exception Record를 포함하고 있지 않은 덤프는 분석 불가)
2. 디버그심볼 경로에 pdb 파일 뿐만 아니라 바이너리 파일까지 모두 존재해야 pdb가 매칭됩니다.
왜 저런 식으로 만들었는지는 모르겠지만... 얼마전에 VisualStudio 2015를 설치해보았더니 2015 버젼에서는 저런 기능제한 없이 자유롭게 분석이 가능하더군요.
저는 앞으로는... 모듈 빌드할때는 VisualStudio 2010을, 메모리 덤프를 분석할때는 Windbg를 쓰되, 덤프의 STL을 분석할 때만 VisualStudio 2015를 쓰기로 했습니다. ^^
'C++ > Debug' 카테고리의 다른 글
WinDbg 디버깅 교육 (1) 디버깅 개론 (0) | 2018.01.08 |
---|---|
WinDbg 라이브디버깅 시 소스창에서 BreakPoint가 설정되지 않는 문제 (Fail to set BP via WinDbg Source Window) (0) | 2016.12.26 |
x64 디버깅 강좌 (1) - x64 Stack 개요 (4) | 2015.08.02 |
windbg의 !locks 확장 명령이 동작하지 않는 경우... (0) | 2014.10.06 |
try~catch 와 __try~__except 의 차이점 (5) | 2014.08.12 |