Dlaczego program Visual Studio 2010 nie może znaleźć / otworzyć plików PDB?

83

Próbuję używać OpenCV w VS 2010. Jestem amatorem i uczę się pierwszych kroków z wiki OpenCV. Jednak podczas próby debugowania projektu otrzymuję następujące błędy:

„C: \ Windows \ SysWOW64 \ ntdll.dll”, Nie można znaleźć lub otworzyć pliku PDB „C: \ Windows \ SysWOW64 \ kernel32.dll”, Nie można znaleźć lub otworzyć pliku PDB „C: \ Windows \ SysWOW64 \ kernellbase. dll ', Nie można znaleźć lub otworzyć pliku PDB

Mam te pliki we właściwym katalogu, więc dlaczego nie może ich otworzyć? Co mam zrobić, aby rozwiązać problem?

HamidRezaHamidiEsfahani
źródło
Co masz na myśli, mówiąc „w odpowiednim katalogu”? Czy baza danych PDB znajduje się w tym samym folderze co biblioteka DLL?
harper
1
@harper: Biorąc pod uwagę, że omawiane biblioteki są plikami systemowymi Windows, pliki PDB prawdopodobnie nie powinny znajdować się w tym samym folderze co biblioteka DLL. Biblioteki DLL znajdują się w katalogu C: \ Windows \ SysWOW64, ale symbole PDB prawdopodobnie będą znajdować się w zaprojektowanym katalogu pamięci podręcznej symboli. Ten, który określisz w opcjach debugowania programu Visual Studio.
Cody Grey
@Cody Gray: Czy możesz skopiować pliki PDB do katalogu (ręcznie), czy też musisz korzystać z serwerów symboli Microsoft (źródłowych)?
harper
@harper: Nie mam pojęcia, czy to zadziała w ten sposób. Nie jestem pewien, czy Visual Studio znajdzie tam symbole PDB (chociaż wyobrażam sobie, że tak ). Ale jeśli chodzi o licencjonowanie, jestem prawie pewien, że musisz używać serwerów symboli MS. W jaki inny sposób zamierzasz uzyskać pliki PDB? Nie jestem też pewien, dlaczego chcesz to bojkotować. Visual Studio ma wszystkie te funkcje wbudowane, więc dlaczego nie skorzystać z tego? Został zaprojektowany do lokalnego buforowania symboli, więc nie musisz ich ponownie pobierać za każdym razem. Już nawet nie zauważam, że to się dzieje.
Cody Grey
@Cody Gray: Nie chcę niczego bojkotować. Nawet nie mam tych PDB. Ale jestem ciekaw, jak to działa.
harper

Odpowiedzi:

124

Najpierw zmień następujące parametry:

Narzędzia -> Opcje -> Debugowanie -> Symbole -> Serwer -> Tak

Następnie naciśnij Ctrl+, F5a zobaczysz niesamowite rzeczy.

seanlitow
źródło
2
Łał! To było niesamowite! Dziękuję za tę odpowiedź. +1 dla Ciebie!
Matthew Crews
Żeby było jasne, to spowoduje pobranie symboli tylko raz, prawda? W ogóle nie powstrzyma mnie to od pracy w trybie offline?
Seanny123,
1
Czy znasz bezpośredni link do pobrania? Pracuję w sieci zamkniętej bez dostępu do internetu.
levkaster
2
Euhm ... Control F5 nie dołącza debuggera AFAIK. Więc ta odpowiedź mija się z celem.
Buckley,
1
Zrobiłem to samo, co powiedziałeś. ale teraz pokazuje, że niektóre symbole są ładowane, podczas gdy reszta innych plików pdb nie jest
dodawana
20

Jestem prawie pewien, że to ostrzeżenia , a nie błędy. Twój projekt powinien nadal działać dobrze.

Ponieważ jednak zawsze powinieneś próbować naprawić ostrzeżenia kompilatora, zobaczmy, co możemy odkryć. W ogóle nie jestem zaznajomiony z OpenCV i nie podajesz linku do samouczka wiki, który obserwujesz. Ale wydaje mi się, że problem polega na tym, że używasz 64-bitowej wersji systemu Windows (o czym świadczy folder „SysWOW64” w ścieżce do plików DLL), ale plik OpenCV, który próbujesz, jest zbudowany dla platformy 32-bitowej. Dlatego może być konieczne przebudowanie projektu przy użyciu CMake, jak wyjaśniono tutaj .

Mówiąc dokładniej, wymienione pliki to pliki systemowe Windows. Pliki PDB zawierają informacje o debugowaniu, których używa program Visual Studio, aby umożliwić przechodzenie do skompilowanego kodu i debugowanie go. W rzeczywistości nie potrzebujesz plików PDB dla bibliotek systemowych, aby móc debugować własny kod. Ale jeśli chcesz, możesz również pobrać symbole dla bibliotek systemowych. Przejdź do menu „Debuguj”, kliknij „Opcje i ustawienia” i przewiń listę w dół po prawej stronie, aż zobaczysz „Włącz obsługę serwera źródłowego”. Upewnij się, że ta opcja jest zaznaczona. Następnie w widoku drzewa po lewej stronie kliknij „Symbole” i upewnij się, że wybrana jest opcja „Serwery symboli Microsoft”. Kliknij przycisk OK, aby zamknąć okno dialogowe, a następnie spróbuj odbudować.

Cody Gray
źródło
7
Nie bardzo wiem, co mam na to odpowiedzieć. Szukasz dalszej pomocy? Czy po prostu zostawiasz komentarz? Ponieważ jeśli szukasz dodatkowej pomocy, będziesz musiał wyjaśnić, co dokładnie poszło nie tak, kiedy „spróbowałeś tego” i co masz na myśli , mówiąc „nie zadziałało”. Wszyscy jesteśmy programistami, wiecie, nie tak jest zgłaszane przydatne raporty o błędach.
Cody Gray
Przepraszam z jakiegoś powodu cała moja wiadomość nie została wklejona. Ale od tego czasu naprawiłem to za pomocą następującej metody. stackoverflow.com/questions/1468726/ ...
daveomcd,
10

Visual Studio Community Edition 2015

Miałem ten błąd przez cały dzień. W końcu naprawiłem to, przechodząc do Narzędzia> Ustawienia importu i eksportu> Resetuj wszystkie opcje> Resetuj ustawienia ogólne.

Po zresetowaniu przejdź do Narzędzia> Opcje> Debugowanie> Symbole> - Następnie zaznacz pole obok pozycji Serwery symboli firmy Microsoft.

Uruchom aplikację w trybie debugowania, a otworzy się okno z informacją, że pobiera symbole dla wielu różnych plików .dll. Niech to skończy.

Po zakończeniu powinno działać ponownie.

Nikt
źródło
Aktualizacja do VS2109 16.8.1 w jakiś sposób zniszczyła pamięć podręczną symboli, która z pamięci mogła znajdować się w katalogu Users / Temp. Sugerowany reset ogólny może nie być konieczny przed ponownym uzyskaniem symboli. Upewnij się, że symbole mają bezpieczny katalog pamięci podręcznej i poczekaj około godziny na ich załadowanie (~ 375 MB). Wybrałem MS zamiast serwera Nuget tylko z przyzwyczajenia. Zamiast resetowania, lekarstwem na paranoję było usunięcie wszystkich plików wygenerowanych przez VS (z wyjątkiem .git) dla projektu przed rozpoczęciem od nowa.
Laurie Stearn
3

Miałem ten sam problem. Okazuje się, że kompilując projekt, który dostałem od kogoś innego, nie ustawiłem poprawnego projektu StartUp (kliknij prawym przyciskiem myszy żądany projekt startowy w eksploratorze rozwiązań i wybierz „ustaw jako projekt startowy”). Może to pomoże, na zdrowie.

Jurek Stefanowicz
źródło
1

Odnosząc się do pierwszego wątku / innej możliwości, VS nie może otworzyć lub znaleźć pliku pdb procesu, gdy masz plik wykonywalny uruchomiony w tle. Pracowałem z mpiexec i napotkałem ten problem. Zawsze sprawdzaj menedżera zadań i zabijaj wszelkie procesy wykonawcze, które zamierzasz zbudować w swoim projekcie. Kiedy to zrobiłem, debugował lub zbudował dobrze.

Ponadto, jeśli spróbujesz kontynuować z ostrzeżeniem, punkty przerwania nie zostaną trafione i nie będzie miał bieżącego pliku wykonywalnego

Mpi
źródło
1

Dla użytkowników VS2013, którzy znaleźli się tutaj tak jak ja:

Tools -> Options -> Debugging -> Symbols

Zobaczysz, że Cache symbols in this directory:pole jest puste; możesz samodzielnie przejrzeć / wprowadzić ścieżkę lub po prostu przejść dalej i kliknąć Load all symbolsprzycisk. Pojawi się okno alertu z informacją „Ponieważ nie wybrałeś katalogu pamięci podręcznej symboli, zostanie użyty domyślny”. Zobaczysz teraz C:\Users\XXXX\AppData\Local\Temp\SymbolCachew poprzednio pustym polu ścieżki. Kliknij Load all symbolspo raz drugi i powinieneś być ustawiony. Uderz ok i tylko dla zachowania staranności wyczyść i odbuduj swoje rozwiązanie.

korytarz
źródło
0

Zauważyłem, że czasami te błędy wynikają z braku uprawnień podczas kompilowania projektu - więc działam jako administrator, aby zapewnić prawidłowe działanie.

SinisterRainbow
źródło
0

Mam te same ostrzeżenia. Nie jestem pewien, czy jest to kwestia bitów 32 vs 64. Właśnie załadowałem nowe symbole i niektóre problemy zostały rozwiązane, ale te dotyczące OpenCV nadal pozostają. To jest fragment wyniku z rozwiązanym lub nierozwiązanym problemem:

„OpenCV_helloworld.exe”: Załadowano „C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll”, Nie można znaleźć lub otworzyć pliku PDB

„OpenCV_helloworld.exe”: załadowano „C: \ WINDOWS \ system32 \ imm32.dll”, załadowano symbole (usunięto informacje o źródle).

Kod wychodzi z 0 na wypadek, gdyby ktoś zapytał.

Program „[4424] OpenCV_helloworld.exe: Native” zakończył działanie z kodem 0 (0x0).

sparaflAsh
źródło
0

Miałem ten sam problem. Debugowanie nie działa z materiałami dostarczanymi z plikiem wykonywalnym OpenCV. musisz zbudować własne pliki binarne.
Następnie włącz serwery symboli Microsoft w Debug-> Opcje i ustawienia-> Debuguj-> Symbole

john ktejik
źródło
0

Napotkałem ten sam problem. Kiedy uruchomiłem test jednostkowy na kodzie C ++, pojawił się komunikat o błędzie „Nie można znaleźć lub otworzyć pliku PDB”.

Dzienniki

Kiedy spojrzałem na dziennik wyjściowy w programie Visual Studio, zobaczyłem, że szukał on niewłaściwego folderu. Zmieniłem nazwę folderu WinUnit, ale coś w kodzie WinUnit szukało pliku PDB przy użyciu starej nazwy folderu. Myślę, że zakodowali to na stałe.

Znalazłem problem

Kiedy po raz pierwszy pobrałem i rozpakowałem pliki WinUnit, główny folder nazywał się „WinUnit-1.2.0909.1”. Po rozpakowaniu pliku zmieniłem nazwę folderu na „WinUnit”, ponieważ łatwiej jest wpisać tekst podczas instalacji projektu programu Visual Studio. Ale najwyraźniej zepsuło to możliwość znalezienia pliku PDB, mimo że wszystko skonfigurowałem zgodnie z dokumentacją WinUnit.

Moja poprawka

Zmieniłem nazwę folderu z powrotem na oryginalną i działa.

Dziwne.

user2384458
źródło
0

Miałem ten sam problem, ale zadziałało inne rozwiązanie.

Najpierw wypróbowałem następujące rozwiązania, z których żadna nie działała:

  1. Załaduj symbole zgodnie z sugestią seanlitow

  2. Usuń / Dodaj odwołanie do PresentationFramework i PresentationCore

  3. Uruchom ponownie system

Rozwiązaniem było cofnięcie kilku ostatnich zmian, które wprowadziłem w swoim kodzie. Właśnie dodałem kilka przycisków opcji i programów obsługi zdarzeń dla zaznaczonych i niezaznaczonych zdarzeń. Po usunięciu moich ostatnich zmian wszystko się skompilowało. Następnie z powrotem dodałem dokładne zmiany i wszystko zostało poprawnie skompilowane. Nie rozumiem, dlaczego to zadziałało - jedyne, co przychodzi mi do głowy, to problem z moim rozwiązaniem VS. W każdym razie, jeśli żadna z pozostałych sugestii nie zadziała, możesz spróbować cofnąć ostatnie zmiany. UWAGA: jeśli zamkniesz i ponownie otworzysz program Visual Studio, Twoja historia cofania zostanie utracona, więc możesz spróbować tego przed zamknięciem programu VS.

Thomas Bailey
źródło