2009-09-08 5 views
2

Microsoft debugger에서 '기호'의 필요성/용도는 무엇입니까?Windows 용 Microsoft 디버깅 도구의 기호?

나는 잠시 동안 디버거를 알아 내려고 노력하면서 어떤 의미를 갖지 못했다. (나는 서버를 디버깅하려고했다. ...). 내 문제의 일부가 적절한 '상징'을 갖고 있지 않았습니다.

무엇입니까? 왜 내가 그들을 필요로 할까? 나는 단지 텍스트를 찾는 것이 아닌가?

더 나은 링크가 있습니까? How to solve Windows system crashes in minutes?

답변

6

주소를 의미있는 이름으로 변환하려면 기호가 필요합니다. 이 프로그램의 디버그 버전을 빌드 할 때, 컴파일러 방법

0x00003791 myprog!methodnamea 
0x00004a42 myprog!methodnameb 

에이 주소를 매핑하는 디버거를

0x00003791 
0x00004a42 

기호 허용 : 예를 들어, 모든 함수 호출에서 귀하의 스택에 위치가 확장자가 .PDB 인 기호를 내 보냅니다. 또한 회선 정보가 포함되어 있으므로 소스 코드 디버깅 등을 할 수 있습니다.

디버거가이를 인식하려면 심볼 검색 경로를 올바르게 설정해야합니다. 명령 창에서이 디렉토리에서 .PDB를 검색하려면

.sympath c:\symbols;c:\temp\symbols 

을 사용할 수 있습니다. 또한 실행 파일이 실행 된 디렉터리와 동일한 디렉터리에서 찾습니다.

당신이 처음에이 경로로 .. 등등 NTDLL, GDI, 같은 OS 바이너리를 해결할 수 있도록 또한 마이크로 소프트 공용 기호 서버를 사용하는 것이 도움이 될 수 있습니다 당신은에

.sympath SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols;c:\symbols 

해야합니다 먼저 c : \ websymbols를 작성하십시오.

0

이진 파일 만 있다면 일반적으로 얻을 수있는 유일한 정보는 스택 추적과 아마도 이진 또는 IL (.NET에서) 지침입니다. 기호를 사용하면 실제로 해당 바이너리/IL 명령을 소스 코드의 해당 행과 일치시킬 수 있습니다. 소스 코드가 있다면 Visual Studio에서 디버거를 연결하고 소스 코드를 단계별로 실행할 수 있습니다.

2

Windows 이진 아키텍처에서는 디버깅에 필요한 정보 (함수 이름, 파일 및 줄 번호 등)가 바이너리 자체에 없습니다. 오히려 디버거가 디버깅하는 동안 사용하는 정보의 종류와 이진 지침을 연관시키는 데 사용되는 PDB 파일 (Program DataBase, 파일 확장자 .pdb)로 수집됩니다.

따라서 서버 중단을 디버깅하려면 서버 응용 프로그램 자체와 서버가 호출하는 Windows 바이너리 모두에 대해 PDB 파일이 필요합니다.

일반적으로 WinDbg를 사용한 나의 경험은 GDB과 비교했을 때 사용법을 배우는 것이 훨씬 더 어려웠지만 사용법을 이해하면 훨씬 더 큰 힘을 얻었습니다. (Windows/Linux 도구의 일반적인 경우와는 반대로 흥미롭게도)

관련 문제