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


Próbuję użyć OpenCV w VS 2010. Jestem amatorem i uczę się pierwszych kroków z wiki OpenCV. Jednak przy próbie debugowania mojego projektu dostaję 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 w odpowiednim katalogu, więc dlaczego nie można ich otworzyć? Co powinienem zrobić, aby rozwiązać problem?


76
2018-01-27 08:03


pochodzenie


Co masz na myśli z "w prawym katalogu"? Czy WPB znajduje się w tym samym folderze co biblioteka DLL? - harper
@harper: Biorąc pod uwagę, że omawiane biblioteki są plikami systemowymi Windows, prawdopodobnie nie są nimi PDB domniemany znajdować się w tym samym folderze co biblioteka DLL. Biblioteki DLL znajdują się w katalogu C: \ Windows \ SysWOW64, ale symbole PDB prawdopodobnie znajdują się w zaprojektowanym katalogu pamięci podręcznej symbolu. Ten, który określasz w opcjach debugowania Visual Studio. - Cody Gray♦
@Cody Gray: Czy możesz skopiować PDB do katalogu (ręcznie) lub czy musisz używać Serwerów Symbolicznych Microsoft (Source)? - harper
@harper: Nie mam pojęcia, czy to zadziała w ten sposób. Nie jestem pewien, czy Visual Studio znajdzie symbole PDB (chociaż ja to sobie wyobrażam by). Ale jeśli chodzi o licencjonowanie, jestem prawie pewien, że musisz używać serwerów symboli MS. Jak inaczej zamierzasz uzyskać pliki PDB? Nie jestem też pewien, dlaczego chciałbyś to zbojkotować. Visual Studio ma wbudowaną całą tę funkcjonalność, więc dlaczego by nie skorzystać z tego? Został zaprojektowany do lokalnego buforowania symboli, dzięki czemu nie trzeba ich ponownie pobierać za każdym razem. Nawet tego nie zauważam. - Cody Gray♦
@Cody Gray: Nie chcę niczego zbojkotować. Nawet nie mam tych PDB. Ale jestem ciekawy, jak to działa. - harper


Odpowiedzi:


Najpierw zmień następujące parametry:

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

Następnie naciśnij Ctrl+F5 i zobaczysz niesamowite rzeczy.


118
2017-11-15 15:12



Łał! To było niesamowite! Dziękuję za tę odpowiedź. +1 dla Ciebie! - Matthew Crews
Żeby było jasne, to będzie tylko pobierać symbole, gdy będzie to słuszne? Nie powstrzyma mnie to w ogóle od pracy w trybie offline? - Seanny123
Czy znasz bezpośredni link do pobrania? Pracuję w zamkniętej sieci bez dostępu do Internetu. - levkaster
Niesamowite, ale jak to działa? Chciałbym się nauczyć niektórych z tych rzeczy - Alexander Leon VI
Euhm ... Kontrola F5 nie dołącza debuggera AFAIK. Tak więc ta odpowiedź nie ma sensu. - buckley


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

Ponieważ jednak zawsze powinieneś próbować naprawiać ostrzeżenia kompilatora, zobaczmy, co możemy odkryć. Nie jestem zaznajomiony z OpenCV i nie łączysz się z tutorialem wiki, który obserwujesz. Ale wygląda na to, ż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 rzeczy OpenCV, które próbujesz, są zbudowane dla platformy 32-bitowej. Być może trzeba będzie odbudować projekt za pomocą CMake, jak wyjaśniono tutaj.

Dokładniej, wymienione pliki są plikami systemowymi Windows. Pliki PDB zawierają informacje o debugowaniu używane przez program Visual Studio w celu umożliwienia wkroczenia i debugowania skompilowanego kodu. W rzeczywistości nie potrzebujesz plików PDB do bibliotek systemowych, aby móc debugować swój własny kod. Ale jeśli chcesz, możesz pobierz symbole także dla bibliotek systemowych. Przejdź do menu "Debugowanie", kliknij "Opcje i ustawienia", a następnie przewiń listę w dół, aż zobaczysz "Włącz obsługę serwera źródłowego". Upewnij się, że opcja jest zaznaczona. Następnie w widoku drzewa po lewej stronie kliknij "Symbole" i upewnij się, że wybrano opcję "Serwery symboli Microsoft". Kliknij przycisk OK, aby zamknąć okno dialogowe, a następnie spróbuj przebudować.


20
2018-01-27 08:33



Próbowałem to nadal nie działa. - daveomcd
Nie jestem naprawdę pewien, co mam odpowiedzieć w odpowiedzi na to. Szukasz dodatkowej pomocy? Czy po prostu zostawiasz komentarz? Bo 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 przez "nie działa". Wszyscy jesteśmy programistami, wiecie, że nie jest tak, jak zgłaszany jest przydatny raport o błędzie. - Cody Gray♦
Niestety z jakiegoś powodu moja cała wiadomość nie została wklejona. Ale od tego czasu naprawiłem to za pomocą następującej metody. stackoverflow.com/questions/1468726/... - daveomcd


Visual Studio Community Edition 2015

Wystąpił ten błąd przez cały dzień. Naprawiłem go, przechodząc do menu 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 Serwerów Symbolu Microsoft.

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

Po zakończeniu powinno działać ponownie.


7
2018-04-02 17:33





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 na pożądany projekt startowy w eksploratorze rozwiązań i wybierz "ustaw jako projekt StartUp"). Może to pomoże, okrzyki.


3
2018-02-21 12:51





Dla VS2013użytkownicy, którzy znajdują się tutaj tak, jak ja:

Tools -> Options -> Debugging -> Symbols

Zobaczysz, że Cache symbols in this directory: pole jest puste; możesz albo przeglądać / wprowadzić ścieżkę samodzielnie lub po prostu przejść do przodu i kliknąć przycisk Load all symbols przycisk. Pojawi się okno alertu z napisem "Ponieważ nie wybrałeś katalogu z pamięcią podręczną, użyty zostanie domyślny". Teraz zobaczysz C:\Users\XXXX\AppData\Local\Temp\SymbolCache w wcześniej pustym polu ścieżki. Kliknij Load all symbols po raz drugi i powinieneś być ustawiony. Hit ok, i tylko ze względu na staranność, oczyść i odbuduj swoje rozwiązanie.


2
2018-06-01 17:05





Odwoływanie się do pierwszego wątku / innej możliwości VS nie może otworzyć lub znaleźć pliku pdb procesu, kiedy twój plik wykonywalny działa w tle. Pracowałem z mpiexec i wpadłem na ten problem. Zawsze sprawdzaj swojego menedżera zadań i zabij każdy proces exec, który chcesz zbudować w swoim projekcie. Raz to zrobiłem, debugowałem lub zbudowałem dobrze.

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


1
2017-07-12 22:49





Odkryłem, że te błędy czasami wynikają z braku uprawnień podczas kompilowania projektu - więc uruchamiam go jako administrator, aby działał poprawnie.


0
2018-03-31 15:27





Mam te same ostrzeżenia. Nie jestem pewien, czy to kwestia 32 kontra 64 bitów. Właśnie załadowano nowe symbole i niektóre problemy zostały rozwiązane, ale te dotyczące OpenCV nadal trwają. Jest to wyciąg z wyjścia z rozwiązanym lub nierozwiązanym problemem:

"OpenCV_helloworld.exe": Załadowano   "C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll", nie można znaleźć ani otworzyć PDB   plik

"OpenCV_helloworld.exe": Załadowany plik "C: \ WINDOWS \ system32 \ imm32.dll",   Wczytywane symbole (usunięto informacje o źródle).

Kod kończy się na 0, na wypadek, gdyby ktoś zapytał.

Program "[4424] OpenCV_helloworld.exe: Native" zakończył się   kod 0 (0x0).


0
2018-06-25 09:32





Miałem ten sam problem. Debugowanie nie działa z materiałami dołączonymi do pliku wykonywalnego OpenCV. musisz zbudować własne pliki binarne.
Następnie włącz Microsoft Symbol Servers w debugowaniu-> opcje i ustawienia-> debug-> symbole


0
2017-12-25 15:58





Wpadłem na ten sam problem. Kiedy uruchomiłem test Unit na kodzie C ++, otrzymałem komunikat o błędzie "Nie można znaleźć ani otworzyć pliku PDB".

Logi

Kiedy spojrzałem na log wyjściowy w Visual Studio, zobaczyłem, że szukał w niewłaściwym folderze. Zmieniłem nazwę folderu WinUnit, ale coś w kodzie WinUnit szukało pliku PDB, używając starej nazwy folderu. Sądzę, że zakodowali to na sztywno.

Znalazłem problem

Kiedy po raz pierwszy pobrałem i rozpakowałem pliki WinUnit, główny folder został nazwany "WinUnit-1.2.0909.1". Po rozpakowaniu pliku zmieniłem nazwę folderu na "WinUnit", ponieważ łatwiej jest pisać podczas konfiguracji projektu Visual Studio. Ale najwyraźniej złamało to możliwości znalezienia pliku PDB, mimo że wszystko konfigurowałem zgodnie z dokumentacją WinUnit.

Moje poprawki

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

Dziwne.


0
2018-05-15 05:55