디버깅 정보를 찾을 수 없거나 Visual Studio의 디버깅 정보와 일치하지 않습니다.
기존 프로젝트를 복사하고 폴더 이름을 변경했습니다.이제 응용 프로그램을 컴파일할 때 이 오류가 발생합니다.
디버깅 정보를 찾을 수 없거나 일치하지 않습니다.로드된 기호가 없습니다.
디버깅을 계속하시겠습니까?
예를 클릭하면 컴파일되고 정상적으로 실행됩니다.하지만 이제 저는 그 메시지를 처리해야 합니다.프로젝트 속성을 중지하기 위해 변경하는 내용이 궁금합니다.
프로젝트에 대한 디버깅 정보를 비활성화했을 수 있습니다.
- 프로젝트에서 마우스 오른쪽 단추를 클릭합니다. ->
- 구성 속성 -> 링커 -> 디버깅
- "디버깅 정보 생성"을 "아니오"에서 "예"로 전환
프로젝트를 다시 빌드하고 다시 시도하십시오. 이제 메시지 없이 실행됩니다. :)
가장 큰 이유는 일치하는 pdb와 exe가 없기 때문입니다.
몇 가지 가능한 해결책:
- 디버그 대신 릴리스에서 컴파일 중입니다.
- 청소/구축 또는 재구축이 필요합니다.
- exe와 동일한 디렉토리에 PDB 파일이 생성되지 않았습니다.
- 일치하지 않는 pdb가 있습니다. 복사된 원본이 오늘 날짜보다 최신이며 무언가 제대로 빌드되지 않을 수 있습니다.
- 모든 디버그 개체 파일 정리 시도
- 빌드 exe 및 pdb가 있는 다른 위치에서 시작한 프로세스에 연결하는 경우
- Visual Studio 다시 시작
코드를 디버깅하고 변경을 하는 동안 비주얼 스튜디오가 PDB 정보를 캐시하는 것처럼 보이고 가끔 막히기도 합니다.Rebuild 솔루션을 수행하여 pdb를 삭제하고 새 pdb를 생성해도 문제가 해결되지 않습니다.
물론 디버깅 생성 정보와 필요한 모든 정보를 가지고 있습니다. 특히 코드를 여러 번 디버깅할 때 이 문제가 발생하기 때문입니다.
Visual Studio는 인메모리 pdb에 만족하는 것처럼 보이며 pdb의 타임스탬프 또는 크기 변화에 관계없이 업데이트를 거부합니다.
이를 재설정하는 유일한 방법은 Visual Studio(IDE)를 종료하고 다시 시작하는 것입니다.
드문 경우이긴 하지만 IDE가 백그라운드에서 계속 실행되고(프로세스 탐색기에 표시됨) 파일의 핸들이 열려 있는 상태로 유지될 수 있습니다.IDE를 다시 시작하기 전에 프로세스를 종료할 수 있습니다.
행운을 빌어요
VS2012에서 이 오류가 발생했습니다.Visual Studio의 버그로 인해 발생한 것이 분명한데, 이 버그는 메인 프로젝트의 로컬 PDB 파일이 전체 실행 파일의 최종 PDB 파일과 이름이 같을 경우(두 파일이 서로 다른 디렉터리에 있더라도!)에 나타납니다.
이 예를 생각해 보십시오.
은 세 프로젝트로 됩니다.main,a,그리고.b.main실행 파일의 최상위 프로젝트입니다.a그리고.b라이브러리가 에 연결되어 있습니까?main.
프로젝트 에서.$(IntDir) 은 " 가수다설정됨로으" 로 .$(SolutionDir)\$(Configuration)\$(ProjectName)\이것은 그 프로젝트를 의미합니다.main는 중간 을 중간파에덤니다합프로 덤프합니다.Debug\main\, 프로젝트.a에게Debug\a\등등.
C/C++ -> Output Files에 대한 설정은 세 가 프 젝 모 설 의 정 두Program Database File Name으로 된 값$(IntDir)$(TargetName).pdb이것은 그 프로젝트를 의미합니다.main을 "PDB 파일"로 합니다.Debug\main\main.pdb, 프로젝트.b~하듯이Debug\b\b.pdb등등.
마막으로에서.Linker -> Debugging - 프로젝트 설정main그자리의 Generate Program Database File값이 다음으로 설정됨$(OutDir)$(TargetName).pdb, 전체 이 ", " " " PDB 파일"로됩니다.Debug\main.pdb.
이 설정에서는 각 PDB 파일이 별도의 디렉토리에 생성됩니다.
이 설정에서는 디버거에서 프로그램을 실행하려고 하면 디버깅 정보를 찾을 수 없거나 오류와 일치하지 않습니다.그리고 만약 당신이 그것을 본다면.Debug\main.pdb파일(존재할 것), 당신은 그것이 정확히 같다는 것을 알게 될 것입니다.Debug\main\main.pdb즉▁pd, b든지▁pd역의▁file PDB의 .main최종 실행 파일의 글로벌 PDB로 예상되는 것을 덮어쓰는 데 성공했습니다.즉, 디버거가 PDB 파일이 "잘못되었다"고 불평하는 것이 맞습니다.그것은 정말 잘못된 것입니다.
다시 말하지만, 위의 설정에서 최종 글로벌 PDB는 어떻게든 상위 프로젝트의 로컬 PDB에 의해 덮어씁니다.왜 그런 일이 일어나는지 모르겠어요.버그인 것 같습니다. (이러한 PDB 파일의 이름은 같지만 서로 다른 디렉토리에서 생성됩니다. 즉, 충돌하지 않아야 합니다.)
해결 은 프로젝트 " " "의하는 것입니다."입니다.main딴 이름예를 들어, 다음으로 이동합니다.C/C++ -> Output Files를해위를 .main 및 Program Database File Name에 가치를 두는.$(IntDir)$(TargetName)_local.pdb(또는 로)$(IntDir)12345.pdb입니다.이것은 갈등을 없애고 문제를 해결할 것입니다.
PDB 생성 사용 방법:
을 오른쪽 버튼으로 합니다.MyProject > Properties > Debugging:
C/C++ > General > Debug Information Output = Program Database (/Zi)Linker > Debugging > Generate Debug Info = Yes (/DEBUG)
내 프로젝트를 정리하고, Visual Studio를 다시 시작하고(만약을 위해), 내 프로젝트를 다시 빌드합니다.그런 다음 출력 폴더에 *.pdb 파일이 포함되어야 합니다.
최적화/해제 코드를 디버그하는 경우 다음을 통해 최적화 해제를 고려하십시오.
C++ > Optimization > Optmization = Disabled (/Od)
저는 같은 문제에 직면했고 위에서 언급한 모든 해결책을 시도했지만 도움이 되지 않았습니다.그리고 무작위로 새로운 해결책을 찾았고 효과가 있었습니다.
솔루션에 여러 프로젝트가 있는 경우에는 하나의 프로젝트(결정해야 하는 특정 프로젝트)를 "시작 프로젝트로 설정"으로 표시해야 합니다.해당 프로젝트를 마우스 오른쪽 단추로 클릭하고 "시작 프로젝트로 설정"을 클릭합니다.
그것은 나에게 효과가 있었다.
그pdb또는 Program Database 파일이 누락된 것 같습니다(기본적으로 경로가 변경되어 컴파일러에서 더 이상 찾을 수 없습니다).자세한 내용은 이 관련 게시물을 참조하십시오.
저도 비슷한 문제가 있었는데, 그 이유는 제 솔루션의 프로젝트 중 하나를 다른 프로세스에서 실행했기 때문인데, 그 프로세스는 삭제될 수 없습니다.저는 그것을 별로 생각하지 않았습니다.따라서 별도의 환경에서 솔루션을 구축할 때 pdb 파일 중 하나가 일치하지 않아 마지막에 pdb 파일을 로드할 수 없었습니다.저는 방금 컴퓨터를 다시 시작했고 그것이 그것을 고쳤습니다.
행운을 빌어요
Visual Studio를 다시 시작하면 이 문제의 한 인스턴스를 해결할 수 있습니다.
솔루션 브라우저 => 정리 => 빌드에서 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다.즉, 빌드가 .pdb를 생성하는 경우(대상 dir에서 확인) 그렇지 않으면 다른 게시물에 언급된 단계별로 디버그를 활성화해야 합니다.
아마도 .pdb/.exe 파일 불일치, 빌드/재구축되지 않은 것과 같은 다른 이유가 있을 것입니다. 하지만 Visual studio 2013에서도 비슷한 사례가 있었습니다.
가상 인라인 기능과 관련이 있는 것 같습니다.
제 경우 디버거는 호출된 C++ 함수가 아닌 다른 C++ 함수의 중간에 있었습니다.점프는 11개의 소스 코드 줄에 의해 소스 코드에서 벗어났지만, 왜 많은 계산 착오가 발생했는지 설명할 수 없습니다.단순한 기능 재정렬을 통해 이 문제를 해결했습니다.
왜 11라인 이동이 원래 발생했는지 좀 더 자세한 분석이 필요할 수 있습니다.
다른 시각 스튜디오에서는 이런 행동을 본 적이 없습니다.
이 문제는 오랫동안 저를 괴롭혀 왔습니다.AnT의 답변은 매우 유용합니다.주요 아이디어는 동일한 디렉터리에 있지 않더라도 동일한 이름을 가진 두 개의 pdb 파일이 없다는 것입니다.
내 상황은 이렇습니다.저는 "FooBar"와 "FooBarDll"이라는 이름의 프로젝트를 가지고 있는데, 첫 번째 프로젝트는 exe이고 두 번째 프로젝트는 dll입니다.두 프로젝트 모두 "FooBar.exe"와 "FooBar.dll"을 각각 생성하도록 TargetName을 "FooBar"로 설정했습니다.
그럼 제가 설정합니다.
- "일반 -> 중간 디렉터리"는 "$(OutDir)\$(ProjectName)"이어야 합니다.\"
- "C/C++ -> 출력 파일 -> 프로그램 데이터베이스 파일 이름"은 "$(IntDir)$(TargetName).pdb"가 됩니다.
- "링커 -> 디버깅 -> 프로그램 데이터베이스 파일 생성"은 "$(OutDir)$(TargetName).pdb"가 됩니다.
다음과 같은 파일이 있습니다.
- 디버그\FooBar.exe
- 디버그\FooBar.pdb //C++ pdb
디버그\FooBar\FooBar.pdb //Linker pdb
디버그\FooBar.dll
- 디버그\FooBar.pdb // C++ pdb를 다시 실행합니다!
- 디버그\FooBarDll\FooBar.pdb // 링커 pdb
제 솔루션은 모든 "TargetName"을 "ProjectName"으로 대체하는 것입니다. 그러면 다음과 같은 이점을 얻을 수 있습니다.
- 디버그\FooBar.exe
- 디버그\FooBar.pdb //C++ pdb
디버그\FooBar\FooBar.pdb //Linker pdb
디버그\FooBar.dll
- 디버그\FooBarDll.pdb // C++ pdb
- 디버그\FooBarDll\FooBarDll.pdb // 링커 pdb
그러면 충돌은 없습니다!
C/C++ pdb에 "C/C++ -> 출력 파일 -> 프로그램 데이터베이스 파일 이름"과 같은 접미사를 지정하면 "$(IntDir)$(ProjectName)_C.pdb"가 됩니다.
저도 같은 문제가 있었고, 이 링크는 VSIDE 폴더에서 "symsrv.no "을 "symsrv.yes"로 이름을 변경하여 문제를 해결하는 데 도움이 되었습니다.
궁금한 점은 폴더 이름을 다음에서 변경해야 한다는 것입니다.
...\Custom Librarry (MyDll.dll(
로.
...\Custom Librarry (MyDll.dll)
괄호를 닫는 것만으로도 효과가 있었습니다!
언급URL : https://stackoverflow.com/questions/2322876/debugging-information-cannot-be-found-or-does-not-match-visual-studios
'programing' 카테고리의 다른 글
| 하위(상위) 수준에서 선언된 Vue 개체의 속성에 액세스하는 방법은 무엇입니까? (0) | 2023.06.23 |
|---|---|
| 변수가 범위 내에 있는지 확인하는 중입니까? (0) | 2023.06.23 |
| Vue.js - Vuex Store의 변환 내부에서 라우터 제어 (0) | 2023.06.23 |
| 가시성:숨김과 디스플레이:없음의 차이점은 무엇입니까? (0) | 2023.06.23 |
| 사용자 지정 메시지를 사용한 Jackson 예외 포착 및 처리 (0) | 2023.06.23 |