Visual Studio 2010에서 PDB 파일을 찾거나 열 수없는 이유는 무엇입니까?


83

저는 VS 2010에서 OpenCV를 사용하려고합니다. 저는 아마추어이고 OpenCV wiki에서 첫 단계를 배우고 있습니다. 그러나 프로젝트를 디버그하려고 할 때 다음 오류가 발생합니다.

'C : \ Windows \ SysWOW64 \ ntdll.dll', PDB 파일 'C : \ Windows \ SysWOW64 \ kernel32.dll'을 찾거나 열 수 없습니다. PDB 파일 'C : \ Windows \ SysWOW64 \ kernellbase.dll'을 찾거나 열 수 없습니다. dll ', PDB 파일을 찾거나 열 수 없습니다.

해당 파일이 올바른 디렉토리에 있는데 왜 열 수 없습니까? 문제를 해결하려면 어떻게해야합니까?


"올바른 디렉토리에서"란 무엇을 의미합니까? PDB가 DLL과 같은 폴더에 있습니까?
harper

1
@harper : 문제의 라이브러리가 Windows 시스템 파일이라는 점을 고려할 때 PDB는 DLL과 동일한 폴더에 있지 않아야 합니다. DLL은 C : \ Windows \ SysWOW64 디렉토리에 있지만 PDB 기호는 디자인 된 기호 캐시 디렉토리에있을 가능성이 높습니다. Visual Studio 디버그 옵션에서 지정한 것입니다.
Cody Gray

@Cody Gray : PDB를 디렉터리에 복사 할 수 있습니까 (수동으로) 아니면 Microsoft (소스) 기호 서버를 사용해야합니까?
하퍼

@harper : 그런 식으로 작동할지 모르겠습니다. (나는 그것이 상상하지만 비주얼 스튜디오 거기에 PDB 기호를 찾을 수 있는지 확실하지 않습니다 ). 그러나 라이선스에 관한 한 MS의 심볼 서버를 사용해야한다고 확신합니다. PDB 파일을 어떻게 얻을 수 있습니까? 나는 또한 당신이 이것을 보이콧하려는 이유를 잘 모르겠습니다. Visual Studio에는이 모든 기능이 내장되어 있으므로이를 활용 해 보는 것은 어떨까요? 기호를 로컬로 캐시하도록 설계되었으므로 매번 다시 다운로드 할 필요가 없습니다. 나는 그것이 더 이상 일어나고 있다는 것을 알아 차리지 못합니다.
Cody Gray

@Cody Gray : 아무것도 보이콧하고 싶지 않습니다. 이 PDB도 없습니다. 하지만 어떻게 작동하는지 궁금합니다.
harper

답변:


124

먼저 다음 매개 변수를 변경하십시오.

도구-> 옵션-> 디버깅-> 기호-> 서버-> 예

그런 다음 Ctrl+를 누르면 F5놀라운 것을 볼 수 있습니다.


2
와! 그것은 굉장했다! 이 답변에 감사드립니다. 당신을 위해 +1!
Matthew Crews

명확하게 말하면 기호를 한 번만 다운로드합니다. 오프라인으로 작업하는 것이 전혀 중단되지 않습니까?
Seanny123 2014

1
다운로드 할 수있는 직접 링크를 알고 있습니까? 인터넷에 연결되지 않은 폐쇄 된 네트워크에서 일하고 있습니다.
levkaster

2
음 ... Control F5는 디버거 AFAIK를 연결하지 않습니다. 그래서이 대답은 요점을 놓치고 있습니다.
buckley 2015-09-07

1
나는 당신이 말한대로 했어요. 하지만 지금은 추가 다른 PDB 파일의 나머지 동안로드되는 몇 가지 기호를하지 않습니다 보여
인 Hemant Parihar

20

나는 그것들이 오류가 아니라 경고 라고 확신 합니다. 프로젝트는 여전히 잘 실행됩니다.

그러나 항상 컴파일러 경고를 수정해야하므로 무엇을 발견 할 수 있는지 살펴 보겠습니다. 나는 OpenCV에 전혀 익숙하지 않으며 당신이 따르는 위키 튜토리얼에 링크하지 않습니다. 하지만 문제는 64 비트 버전의 Windows (DLL 파일 경로의 "SysWOW64"폴더에서 알 수 있듯이)를 실행하고 있지만 시도중인 OpenCV 항목이 빌드 된 것 같습니다. 32 비트 플랫폼 용. 따라서 여기에 설명 된대로 CMake를 사용하여 프로젝트를 다시 빌드해야 할 수 있습니다 .

보다 구체적으로 나열되는 파일은 Windows 시스템 파일입니다. PDB 파일에는 Visual Studio에서 컴파일 된 코드를 실행하고 디버깅하는 데 사용하는 디버깅 정보가 포함되어 있습니다. 시스템 라이브러리가 자신의 코드를 디버그 할 수 있도록 PDB 파일이 실제로 필요하지는 않습니다. 그러나 원하는 경우 시스템 라이브러리 의 기호도 다운로드 할 수 있습니다. "디버그"메뉴로 이동하여 "옵션 및 설정"을 클릭하고 "소스 서버 지원 활성화"가 표시 될 때까지 오른쪽의 목록 상자를 아래로 스크롤합니다. 옵션이 선택되어 있는지 확인하십시오. 그런 다음 왼쪽의 트리보기에서 "Symbols"를 클릭하고 "Microsoft Symbol Servers"옵션이 선택되었는지 확인합니다. 확인을 클릭하여 대화 상자를 닫은 다음 다시 빌드하십시오.


7
나는 그것에 대한 응답으로 내가 무엇을 말해야하는지 잘 모르겠습니다. 더 많은 도움이 필요하십니까? 아니면 그냥 댓글을 남기시나요? 더 많은 도움을 찾고 있다면 "이것을 시도"했을 때 정확히 무엇이 잘못되었고 "작동하지 않았다"는 의미 를 설명해야하기 때문 입니다. 우리는 모두 프로그래머이며 유용한 버그 보고서가 제출되는 방식이 아닙니다.
Cody Gray

어떤 이유로 든 내 메시지 전체를 붙여 넣지 못해서 죄송합니다. 그러나 그 이후로 다음 방법을 사용하여 수정했습니다. stackoverflow.com/questions/1468726/...
daveomcd

10

Visual Studio 커뮤니티 에디션 2015

이 오류가 하루 종일 발생했습니다. 도구> 설정 가져 오기 및 내보내기> 모든 옵션 재설정> 일반 설정 재설정으로 이동하여 마침내 수정했습니다.

재설정되면 Tools> Options> Debugging> Symbols>로 이동 한 다음 Microsoft Symbol Servers 옆의 확인란을 선택하십시오.

디버그 모드에서 앱을 실행하면 다양한 .dll 파일에 대한 기호를 다운로드한다는 창이 열립니다. 이 일을 끝내자.

완료되면 다시 작동합니다.


VS2109 16.8.1로 업그레이드하면 메모리에서 Users / Temp 디렉토리에있을 수있는 기호 캐시가 어떻게해서 든 누크되었습니다. 기호를 다시 획득하기 전에 제안 된 일반 재설정이 필요하지 않을 수 있습니다. 심볼에 안전한 캐시 디렉터리가 있는지 확인하고로드 될 때까지 1 시간 정도 (~ 375mb) 기다립니다. 나는 습관의 힘으로 만 Nuget 서버보다 MS를 선택했습니다. 재설정 대신 편집증에 대한 치료법은 프로젝트를 새로 시작하기 전에 모든 VS 생성 파일 (.git 제외)을 제거하는 것이 었습니다.
로리 스턴

3

나는 같은 문제가 있었다. 다른 사람에게서받은 프로젝트를 컴파일 할 때 올바른 시작 프로젝트를 설정하지 않았습니다 (솔루션 탐색기에서 원하는 시작 프로젝트를 마우스 오른쪽 단추로 클릭하고 "시작 프로젝트로 설정"선택). 아마도 이것이 도움이 될 것입니다.


1

첫 번째 스레드 / 다른 가능성 VS 프로세스의 pdb 파일을 열거 나 찾을 수 없다는 것은 실행 파일이 백그라운드에서 실행되는 경우입니다. mpiexec로 작업 중이 었고이 문제가 발생했습니다. 항상 작업 관리자를 확인하고 프로젝트에서 빌드 할 exec 프로세스를 종료하십시오. 일단 그렇게하면 디버그되거나 잘 구축되었습니다.

또한 경고를 계속하려고하면 중단 점이 적중되지 않고 현재 실행 파일이 없습니다.


1

대한 VS2013 내가 한 여기에 자신을 발견 사용자 :

Tools -> Options -> Debugging -> Symbols

당신은 것을 볼 수 있습니다 Cache symbols in this directory:필드가 비어; 경로를 직접 찾아 보거나 입력하거나 계속해서 Load all symbols버튼을 클릭 할 수 있습니다. "심볼 캐시 디렉토리를 선택하지 않았으므로 기본값이 사용됩니다"라는 경고 창이 나타납니다. 이제 C:\Users\XXXX\AppData\Local\Temp\SymbolCache이전에 비어있는 경로 필드에 표시됩니다. Load all symbols두 번째 클릭 하면 설정되어야합니다. 확인을 누르고 부지런함을 위해 솔루션을 정리하고 다시 빌드하십시오.


0

이러한 오류는 때때로 프로젝트를 컴파일 할 때 권한이 부족하여 발생한다는 것을 발견했습니다. 따라서 제대로 작동하도록 관리자 권한으로 실행합니다.


0

나는 같은 경고를 받고 있습니다. 32 비트 대 64 비트의 문제인지 잘 모르겠습니다. 새 기호를로드하고 몇 가지 문제가 해결되었지만 OpenCV와 관련된 문제는 여전히 남아 있습니다. 다음은 해결 된 문제와 해결되지 않은 문제의 출력을 발췌 한 것입니다.

'OpenCV_helloworld.exe': 'C : \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll'로드 됨, PDB 파일을 찾거나 열 수 없음

'OpenCV_helloworld.exe': 'C : \ WINDOWS \ system32 \ imm32.dll'로드 됨, 기호로드 됨 (소스 정보 제거됨).

누군가가 묻는 경우 코드는 0으로 종료됩니다.

'[4424] OpenCV_helloworld.exe : Native'프로그램이 코드 0 (0x0)으로 종료되었습니다.


0

나는 같은 문제가 있었다. 디버깅은 OpenCV 실행 파일과 함께 제공되는 항목에서는 작동하지 않습니다. 자신 만의 바이너리를 만들어야합니다.
그런 다음 디버그-> 옵션 및 설정-> 디버그-> 기호에서 Microsoft 기호 서버를 활성화합니다.


0

나는 같은 문제에 부딪쳤다. C ++ 코드에서 단위 테스트를 실행할 때 "PDB 파일을 찾거나 열 수 없습니다"라는 오류가 발생했습니다.

로그

Visual Studio에서 출력 로그를 보았을 때 잘못된 폴더를 찾고 있음을 알았습니다. WinUnit 폴더의 이름을 변경했지만 WinUnit 코드에서 이전 폴더 이름을 사용하여 PDB 파일을 찾고있었습니다. 나는 그들이 그것을 하드 코딩했다고 생각한다.

문제 발견

WinUnit 파일을 처음 다운로드하고 압축을 풀었을 때 기본 폴더는 "WinUnit-1.2.0909.1"이었습니다. 파일 압축을 푼 후 Visual Studio 프로젝트 설정 중에 입력하기가 더 쉽기 때문에 폴더 이름을 "WinUnit"으로 변경했습니다. 그러나 분명히 이것은 WinUnit 문서에 따라 모든 것을 설정했지만 PDB 파일을 찾는 기능을 망쳤습니다.

내 수정

폴더 이름을 다시 원본으로 변경했는데 작동합니다.

기묘한.


0

여기에 동일한 문제가 있었지만 다른 솔루션이 작동했습니다.

먼저 다음을 시도했지만 어느 것도 작동하지 않았습니다.

  1. seanlitow에서 제안한대로 기호로드

  2. PresentationFramework 및 PresentationCore에 대한 참조 제거 / 추가

  3. 시스템 재시작

해결책은 코드에 대한 마지막 몇 가지 변경 사항 을 취소 하는 것이 었습니다. 확인 된 이벤트와 확인되지 않은 이벤트에 대해 몇 개의 라디오 버튼과 이벤트 핸들러를 추가했습니다. 최근 변경 사항을 제거한 후 모든 것이 컴파일되었습니다. 그런 다음 정확한 변경 사항을 다시 추가 하고 모든 것이 제대로 컴파일되었습니다. 왜 이것이 효과가 있는지 이해하지 못합니다. 내가 생각할 수있는 유일한 것은 내 VS 솔루션의 문제입니다. 어쨌든, 다른 제안이 작동하지 않으면 가장 최근 변경 사항을 되돌릴 수 있습니다. 참고 : Visual Studio를 닫았다가 다시 열면 실행 취소 기록이 손실되므로 VS를 닫기 전에이 작업을 시도 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.