Posted by on 2020-02-06

컴퓨터에 DLL 또는 실행 파일을 빌드한 경우 기본적으로 링커는 연결된 PDB 파일의 전체 경로 및 파일 이름을 DLL 또는 실행 파일 내에 배치합니다. 디버깅할 때 디버거는 먼저 DLL 또는 실행 파일 내에 지정된 위치에 심볼 파일이 있는지 확인합니다. 컴퓨터에서 컴파일한 코드에 항상 사용할 수 있는 기호가 있기 때문에 유용합니다. 항상 로컬에 기호를 캐시하는 것이 좋습니다. 심볼을 로컬로 캐시하는 한 가지 방법은 캐시*를 포함하는 것입니다. 또는 심볼 경로에 캐시*로컬 기호 캐시;* 다음 방법 중 하나에서 기호 서버에 액세스할 수 있습니다 @Torkell. 오히려, 내가 질문을 이해, Windows 업데이트 정기적으로 나중에 오래 된 되 고 이전에 다운로드 된 기호에 이르게 시스템 구성 요소를 대체 하 고 따라서 기호 서버에서 기호의 또 다른 가져오기를 트리거합니다. 이 환경 변수를 사용하면 내부 개인 심볼 서버와 같은 여러 심볼 서버를 지정할 수 있습니다. 또한 내부적으로 및 인터넷을 통해 심볼 서버에서 조회하는 모든 기호에 대해 PDB를 저장할 로컬 캐시 디렉토리를 지정할 수 있습니다. 내 경우에는 이미 기호를 다운로드했습니다. 그래서 위의 스크린샷에서 로그가 생성되는 로그가 매우 적습니다. 모든 기호를 다운로드하려면 /f가 강제 다운로드를 의미하는 “.reload /f”를 실행합니다. 이를 통해 디버깅 랩으로 설정됩니다.

인터넷에 연결되지 않은 컴퓨터에 대한 기호를 검색하는 방법에 대한 자세한 내용은 SymChk와 함께 매니페스트 파일 사용을 참조하십시오. 이 포스트에서는 프로그램 기호 파일을 사용하여 Windows 운영 체제에서 응용 프로그램 또는 커널 드라이버를 디버깅하는 방법을 설명합니다. Windows 플랫폼에서 프로그램 기호는 별도의 파일에 저장됩니다. 이러한 파일은 pdb 파일이라고하며 확장자 .pdb가 있습니다. windbg에서 프로그램을 디버깅 할 때 스택 추적에서 볼 수있는 것은 함수 이름과 변수 이름 대신 숫자 주소일 뿐입니다. 이러한 숫자 주소에서는 아무 것도 만들 수 없습니다. pdb 파일에 저장된 기호는 함수 이름, 로컬 변수 이름, 전역 변수 이름 등입니다. _NT_SYMBOL_PATH 예를 들어 .sympath+ D:gxrbin64를 사용하여 기호를 로드할 수 없습니다. C:기호Windows10x86;srv*C:OnlineCache*https://msdl.microsoft.com/download/기호 그래서 그것은 로컬로 설치 된 기호를 먼저 시도 합니다. 하지만 당신의 제안을 시도 할 때 나는 비주얼 스튜디오의 목록에 마이크로 소프트 심볼 서버를 추가했지만 도움이되지 않았다) 안녕하세요, 이것은 몇 가지 충돌 덤프를 사용하여 Windbg을 학습 내 두 번째 날입니다.

나는 Windbg가 모듈에 대한 pDB를로드하도록 강요 할 수있는 방법을 찾고 있었다. 귀하의 기사는 (스택이 명확하게 올바르지 않더라도 디버거가 처음에 옳았다는 것을 의미함) 수동으로 기호를 배치하는 컴퓨터에 디렉토리가있는 경우 해당 디렉토리를 심볼 서버에서 얻은 기호의 캐시로 사용하지 마십시오. 대신 두 개의 별도의 디렉터리를 사용합니다. 예를 들어 c:MyRegular Symbols에 기호를 수동으로 배치한 다음 서버에서 가져온 기호에 대한 캐시로 c:MyServer Symbol를 지정할 수 있습니다. 다음 예제에서는 기호 경로에서 두 디렉터리를 지정하는 방법을 보여 줍니다. .pdb 파일 형식입니다. 이러한 기호는 Visual Studio 컴파일러에서 코드를 컴파일하는 동안 생성할 수 있습니다. 이것은 미래의 블로그 포스트 중 하나에서 해결될 것입니다. [로컬 캐시]를 사용된 기호의 캐시(예: %SYSTEMROOT%) 또는 c:기호를 저장할 컴퓨터의 디렉터리 이름으로 바꿉니다. 예를 들어 다음 명령은 디버거에게 네트워크 공유 someshare에서 기호를 가져오고 c:MySymbols 디렉터리에서 기호를 캐시하도록 지시합니다.