Symbol File (심볼 파일) 이란?
디버그 심볼 파일이란 실행 파일을 빌드할 때 생성되는 디버그용 파일.
심볼 파일이 or 심볼이라고 불러짐
심볼 파일에 포함되는 정보
실행 파일안에 존재하는 함수, 변수의
이름, 위치, 소스 파일, 소스 라인 정보.
Visual studio나 WinDbg 같은 비거거는 이 심볼 파일을 이용해
소스 라인 디버깅을 가능하게 함
심볼 파일 생성법
Visual studio 의 경우
Debug 빌드 시 자동 생성
Release 빌드는 생성 되지 않음
하지만 Release 빌드라도 심볼 파일은 생성해놔야 함
(디버깅을 위해)
Relase 빌드에서 심볼 생성 방법
1. 프로젝트 메뉴의 속성
2. 상단의 구성(Configuration) 을 [Release] or [All Configuration] 로 선택
3. 플랫폼(Platform) 비트 선택
4. C/C++ 트리 선택
5. 디버깅 정보 형식을 [프로그램 데이터 베이스(/Zi)] 로 선택
6. 링커 트리를 펼치고 디버깅 선택
7. 디버그 정보 생성을 [예(/DEBUG)]로 설정
8. 프로그램 데이터베이스 파일 생성을 [ (./Release/프로젝트이름.pdb) $(OutDir)$(TargetName).pdb)]로 설정
9. 맵 파일 생성을 [예(/MAP)] 설정
10. Map Exports 를 [YES(/MAPINFO:EXPORTS)] 설정
WinDbg 심볼 파일 로드
로드해야 하는 심볼 파일은 크게 운영체제 심볼 파일과 디버깅 하려는 모듈의 심볼 파일로 구분
마이크로소프트는 모든 운영체제의 심볼 파일을 웹 심볼이라는 형태로 제공
기본적으로 웹 심볼의 URL을 심볼 파일 경로에 등록해주면 됨
심볼 형식
SRV*E:/OsSymbols*http://mdsl.microsoft.com/download/symbols;E:\MySymbols
심볼 형식 옵션 설명
SRV
심볼 서버를 사용한다는 의미
E:/OsSymbols
다운로드 받은 심볼 파일을 저장해 놓을 경로
일단 다운로드 받은 심볼 파일들은 다시 다운로드하지 않고
이 디렉토리에 있는 것을 사용하므로 일종의 캐시 개념으로 볼 수 있음
http://mdsl.microsoft.com/download/symbols
웹 심볼 서버의 URL
E:\MySymbols
심볼 파일만 모아두는 별도의 경로가 있는경우 이를 바라보게 하는 설정
세미클론을 이용해 경로 추가 가능
심볼을 심볼 경로에 포함하는 방법
1. 파일 메뉴 이용
WinDbg 상단의 File > Symbol File Path 선택
Reload 를 체크하고 OK 클릭하면 현재 필요한 모든 심볼 파일을 바로 download 함
[참고]
모든 운영체제 파일에 대한 심볼 파일을 바로 다운로드하는 것을 아님
'현재 필요한' 파일만 download 함
2. WinDgb 명령어 이용
.symfix E:/OsSymbols
심볼 파일을 받아옴
microsoft url은 을 입력하지 않아도 알아서 받아옴
저장할 경로만 넣어주거나
뒤에 url 추가해주면 받아옴
.sympath
뒤에 인자값 없이 사용하면 현재 심볼 설정을 출력
.sympath+ E:\MySymbols
경로를 추가해야하는 경우 인자값을 넣어줌
추가할 경우는 세미클론 사용 ";'"
"+" 를 사용시 기존에 설정된 경로에 추가
사용 안할 시 새로 덮어씌어지게됨
(pdb 파일 경로를 추가함)
.srcpath+ E:\MySymbols
cpp 와 같은 pdb 에 해당하는 소스코드 경로를 넣어줌
해당 설정이 되어있어야 call stack 하고 소스 위치를 클릭했을때
소스 파일의 오류 위치가 보임
.reload
상위 설정이 완료되었으면
reload 명령을 해야 심볼을 받아옴
.reload /i 프로세스이름 or 라이브러리 이링
.reload 명령으로 pdb 연결이 안되었을 경우
상위 명령으로 강제로 붙임
완료 후에 lm 명령으로 pdb 가 정상적으로 붙었는지 확인해야함
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
참고
책 : WinDbg 로 쉽게 배우는 Windows Debugging
'Tool 사용법 > WinDBG' 카테고리의 다른 글
WinDBG 프로세스 디버깅 (유저모드 라이브 디버깅) (0) | 2020.09.11 |
---|---|
WinDBG Dump 파일 디버깅 (유저모드 덤프 디버깅) (0) | 2020.09.11 |
WinDBG 사용법 (0) | 2020.09.11 |