2011-03-16 4 views
3

new StackFrame() 또는 new StackTrace()을 사용하여 스택 추적을 얻으면 파일 및 위치 정보를 얻기 위해 fNeedFileInfo에 'true'를 전달할 수 있습니다. 이를 위해서는 PDB 파일이 필요합니다.StackTrace에 PDB를 찾을 위치를 알려주는 방법은 무엇입니까?

제 질문은 : CLR이 PDB 파일을 어떻게 보이나요?

우리 최종 사용자에게는 PDB가 로컬로 없지만 네트워크 공유에서 사용할 수 있습니다. 스택 추적을 수행 할 때 CLR의 위치를 ​​알려줄 수 있습니까?

답변

1

CLR은 소스 및 회선 정보를 확인하기 위해 DIA (Debug Interface Access) API를 사용합니다. DIA는 기호를 해석 할 때 _NT_SYMBOL_PATH 환경 변수를 고려합니다. 여러 개의 폴더 (로컬 또는 네트워크) 또는 기호 서버를 지정할 수 있습니다. 특정 구문은 here을 참조하십시오.

이 경우, Environment.SetEnvironmentVariable을 사용하여 프로세스의 기호 경로를 설정할 수 있습니다. 예를 들면 다음과 같습니다.

... 로컬 Microsoft 공유 서버와 공용 네트워크 모두에서 기호를 검색하도록 지정합니다. 네트워크를 통해 심볼을 찾는 것은 실제로 느려질 수 있습니다. 하지만 StackTrace을 사용하는 경우에는 문제가되지 않습니다.

+0

나는 이것이 우리를 위해 일할 것이라고 생각한다. 고마워. – scobi

1

CLR은 COM 구성 요소를 사용하여 프레임 워크 디렉토리에 저장되어있는 .pdb 파일 diasymreader.dll을 읽습니다. 이 구성 요소의 프로그래밍 방식 인터페이스 만 문서화됩니다 (ISymUnmanagedReader). 모든 종류의 구성 옵션에 대한 MSDN 라이브러리의 내용이 없습니다. 또한 CLR은이를 제공하지도 않습니다.

약속 안함. 그러나 DLL의 바이너리 덤프에 레지스트리 키가 표시됩니다. SymbolSearchPath라는 이름의 HKLM \ Software \ Microsoft \ VisualStudio \ MSPDB와 같습니다. 훌륭한 일치처럼 들리지만이 키와 값을 Regedit.exe와 함께 추가하면됩니다. .pdb 파일과 함께 디렉토리의 이름을 포함하는 문자열로 만드십시오.

관련 문제