애플리케이션, 라이브러리, 드라이버 또는 운영 체제가 연결된 경우 .exe 및 .dll 파일을 만드는 링커는 기호 파일이라는 여러 개의 추가 파일을 만듭니다.
기호 파일에는 이진 파일을 실행할 때 실제로 필요하지 않지만 디버깅 프로세스에서 매우 유용할 수 있는 다양한 데이터가 있습니다.
일반적으로 기호 파일에는 다음이 포함될 수 있습니다.
전역 변수
지역 변수
함수 이름 및 진입점의 주소
프레임 포인터 누락(FPO) 레코드
원본 줄 번호
이러한 각 항목은 개별적으로 기호로 호출됩니다. 예를 들어 단일 기호 파일 Myprogram.pdb에는 전역 변수 및 함수 이름과 수백 개의 지역 변수를 포함하여 수백 개의 기호가 포함될 수 있습니다. 종종 소프트웨어 회사는 두 가지 버전의 각 기호 파일을 릴리스합니다. 즉 , 공용 기호 와 프라이빗 기호를 모두 포함하는 전체 기호 파일과 공용 기호만 포함하는 축소된(제거된) 파일입니다. 자세한 내용은 공용 및 개인 기호를 참조하세요.
디버깅할 때 디버거가 디버깅할 대상과 연결된 기호 파일에 액세스할 수 있는지 확인해야 합니다. 라이브 디버깅 및 디버깅 크래시 덤프 파일 모두 기호가 필요합니다. 디버그하려는 코드에 대한 적절한 기호를 가져와서 디버거에 로드해야 합니다.
Windows 기호
Windows는 확장명은 .pdb인 파일에 기호를 유지합니다.
컴파일러와 링커는 기호 형식을 제어합니다. Visual C++ 링커는 모든 기호를 .pdb 파일에 배치합니다.
Windows 운영 체제는 두 가지 버전으로 빌드되었습니다. 무료 빌드(또는 일반 빌드)에는 비교적 작은 이진 파일이 있으며, 확인된 빌드(또는 디버그 빌드)에는 코드 자체에 더 많은 디버깅 기호가 있는 더 큰 이진 파일이 있습니다. 확인된 빌드는 Windows 10 버전 1803 이전 버전의 Windows에서 사용할 수 있었습니다. 이러한 각 빌드에는 고유한 기호 파일이 있습니다. Windows에서 대상을 디버깅할 때 대상에서 Windows 빌드와 일치하는 기호 파일을 사용해야 합니다.
다음 표에서는 표준 Windows 기호 트리에 있는 여러 디렉터리를 나열합니다.
| 디렉터리 | 에 대한 기호 파일 포함 |
|---|---|
ACM |
Microsoft Audio Compression Manager 파일 |
COM |
실행 파일(.com) |
CPL |
제어판 프로그램 |
동적 링크 라이브러리 (DLL) |
동적 연결 라이브러리 파일(.dll) |
DRV |
드라이버 파일(.drv) |
EXE |
실행 파일(.exe) |
SCR |
화면 보호기 파일 |
SYS |
드라이버 파일(.sys) |