2010-02-24 18 views

Odpowiedz

29

Głównym powodem jest to, że nie masz pasującego pdb i exe.

Możliwe rozwiązania:

  • kompilujesz w wydaniu zamiast debugowania
  • Trzeba oczyścić/zbudować lub odbudować
  • Ty nie masz PDB pliki generowane w tym samym katalogu jako exe
  • Masz niedopasowane pdb, może skopiowane źródło jest nowsze niż dzisiejsza data i coś nie buduje się prawidłowo.
  • Spróbuj wyczyścić wszystkie pliki wynikowe debugowania
  • podłączana do procesu, który rozpoczął się z innego miejsca, skąd twój build exe i PDB istnieć
  • Restart Visual Studio
1

Wygląda na to, że brakuje pliku pdb lub programu bazy danych (w zasadzie ścieżka uległa zmianie i nie można jej już znaleźć w kompilatorze). Aby uzyskać dodatkowe informacje, patrz this powiązany wpis.

55

Prawdopodobnie wyłączono informacje debugowania dla projektu:

  • prawym przyciskiem myszy na projekcie -> Właściwości
  • Konfiguracja Właściwości -> Linker -> Debugowanie
  • Przełącznik "Generate Debug Info" z No na Yes

odbudować swój projekt i ponownie, powinien teraz działać bez komunikatu :)

+3

taki Easy Fix! – Watusimoto

+0

@NicholasGuillaume Używam wersji i otrzymuję ten błąd. Nie chcę, aby generować informacje debugowania. Czy istnieje sposób, że mogę Visual Studio nie próbować uruchomić z informacjami debugowania? –

+0

@ JonathanMee Nie tak daleko, jak wiem. –

0

miałem podobny problem Powodem było to, że uruchomiłem jeden z projektów mojego rozwiązania w innym procesie i ten proces nie mógł zostać zabity. Niewiele o tym myślałem. Kiedy więc budowałem rozwiązanie w osobnym środowisku, jeden z plików pdb nie pasował, więc na końcu nie mogłem załadować żadnego z plików pdb. Właśnie zrestartowałem komputer i to naprawiło.

Powodzenia

9

Dzieje się tak do mnie co jakiś czas, podczas debugowania kodu i dokonywania zmian wydaje się visual studio buforuje WPB informacje i czasami utyka. Wykonanie rozwiązania Przebuduj, usunięcie pdb i utworzenie nowego nie rozwiązuje problemu.

Oczywiście mam generowane informacje debugowania i wszystko, co jest potrzebne, szczególnie, że dzieje się to podczas debugowania kodu kilka razy.

Visual Studio wydaje się być zadowolony z pdb w pamięci i odmawia jego aktualizacji, niezależnie od znaczników czasowych, a nawet zmian rozmiaru w pdb.

Jedynym sposobem na zresetowanie tego jest wyjście z Visual Studio (IDE) i ponowne uruchomienie go ponownie.

W niektórych rzadkich przypadkach IDE może nadal działać w tle (eksplorator procesów pokazuje to tam) i może przechowywać uchwyt do pliku otwartego. Możesz zabić proces przed ponownym uruchomieniem IDE.

Powodzenia

0

Ponowne Visual Studio może rozwiązać jedno wystąpienie tego problemu.

0

Kliknij prawym przyciskiem myszy swój projekt w przeglądarce rozwiązań => Wyczyść => Zbuduj. To jest, jeśli build generuje .pdb w ogóle (poszukaj w swojej docelowej dir) Jeśli nie, należy włączyć debugowanie przez etapów wymienionych w innych postach

2

I w obliczu tego samego problemu i wypróbowaniu wszystkich wyżej wymienionych rozwiązań, ale to nie mogło mi pomóc. Potem znalazłem nowe rozwiązanie losowo i zadziałało.

Rozwiązaniem jest to, że w przypadku, gdy masz wiele projektów w rozwiązaniu, powinieneś oznaczyć każdy (konkretny, który musisz zdecydować) projekt jako "Ustaw jako projekt startowy". Kliknij ten projekt prawym przyciskiem myszy i kliknij "Ustaw jako projekt startowy".

To zadziałało dla mnie.

+0

Dzięki. To działało dla mnie. – Waqar

+0

Wow. Dziękuję Ci. – Ben

6

Właśnie napotkałem ten błąd w VS2012. Jest to z pewnością spowodowane przez błąd w Visual Studio, który ujawnia się w sytuacjach, gdy lokalny plik PDB głównego projektu ma taką samą nazwę jak końcowy plik PDB dla całego pliku wykonywalnego (nawet jeśli te dwa pliki znajdują się w różnych katalogach!)

Rozważ ten przykład.

Rozwiązanie składa się z trzech projektów: main, a i b. main to projekt najwyższego poziomu dla pliku wykonywalnego, podczas gdy a i b są bibliotekami połączonymi z main.

We wszystkich trzech projektach zmienna $(IntDir) jest ustawiona na $(SolutionDir)\$(Configuration)\$(ProjectName)\. Oznacza to, że projekt main zrzuca swoje pliki pośrednie do Debug\main\, projektu a - do Debug\a\ i tak dalej.

W ustawieniach C/C++ -> Output Files wszystkie trzy projekty mają wartość Program Database File Name ustawioną na $(IntDir)$(TargetName).pdb. Oznacza to, że projekt main generuje lokalny plik PDB jako Debug\main\main.pdb, projekt b jako Debug\b\b.pdb i tak dalej.

Wreszcie w ustawieniach Linker -> Debugging ustawień projektu main ustawiono wartość Generate Program Database File na $(OutDir)$(TargetName).pdb. Oznacza to, że globalny plik PDB dla całego pliku wykonywalnego zostanie wygenerowany jako Debug\main.pdb.

Należy zauważyć, że w tym ustawieniu każdy plik PDB jest generowany w oddzielnym katalogu.

W tej konfiguracji uzyskasz Nie można znaleźć informacji o debugowaniu lub nie pasuje ona do błędu, jeśli próbujesz uruchomić program pod debuggerem.A jeśli spojrzysz na plik Debug\main.pdb (który będzie istnieć), zauważysz, że jest dokładnie taki sam jak plik Debug\main\main.pdb! To znaczy. w jakiś sposób lokalny PDB dla main zdołał nadpisać to, co miało być globalnym PDB dla końcowego pliku wykonywalnego. To znaczy. debugger ma prawo złożyć zażalenie, że plik PDB jest "nieprawidłowy". To rzeczywiście jest złe.

Ponownie, w powyższym ustawieniu ostateczny globalny PDB zostanie w jakiś sposób nadpisany przez lokalny PDB najwyższego projektu. Nie wiem, dlaczego tak się dzieje. Wygląda na to, że jest to błąd. (Zwróć uwagę, że nawet jeśli te pliki PDB mają taką samą nazwę, są generowane w różnych katalogach, tj. Nie powinny być w konflikcie).

Rozwiązaniem, które rozwiązuje ten problem, jest nadanie lokalnemu WPB projektu main innej nazwie. Na przykład przejdź do C/C++ -> Output Files dla projektu main i zmień wartość Program Database File Name na $(IntDir)$(TargetName)_local.pdb (lub na $(IntDir)12345.pdb, jeśli sobie tego życzysz). To wyeliminuje konflikt i rozwiąże problem.

-1

Ciekawy, zdarza mi się, że muszę zmienić nazwę folderu z:

...\Custom Librarry (MyDll.dll(

do

...\Custom Librarry (MyDll.dll) 

tylko przez zamknięcie nawiasu to działa!

0

Prawdopodobnie istnieją inne przyczyny, takie jak .pdb/.exe niedopasowania, coś nie wybudowano/przebudowano ale miałem podobny przypadek w Visual Studio 2013 -

coś wspólnego z funkcją wirtualną inline - tak ja posądzać.

W moim przypadku debugger skakał w środku innej funkcji C++, a nie tej, która została wywołana. Skok został wyłączony z kodu źródłowego 11 liniami kodu źródłowego, ale nie potrafię wyjaśnić, dlaczego doszło do wielu błędów. Prostymi zmianami funkcji pozbyłem się tego problemu.

Może być potrzebna bardziej szczegółowa analiza, dlaczego 11 linii przesunięcie stało się pierwotnie.

Nie widziałem tego rodzaju zachowania w żadnym innym studiu graficznym.

0

Ten problem nie dawał mi spokoju przez długi czas. AnTser jest bardzo pomocny. Głównym pomysłem jest Nie ma żadnych dwóch plików pdb o tej samej nazwie, nawet jeśli nie znajdują się w tym samym katalogu.

To jest moja sytuacja: mam nazwy projektów holowniczych "FooBar" i "FooBarDll", pierwszy to exe, a drugi to biblioteka dll. Ustawię oba projekty: Nazwa docelowa na "FooBar", aby wygenerowały odpowiednio "FooBar.exe" i "FooBar.dll".

Potem ustawić

  1. "Ogólne -> Intermediate katalog" być "$ (OUTDIR) \ $ (ProjectName) \"
  2. „C/C++ -> Output Files -> plik bazy danych programu Nazwa "być" $ (IntDir) $ (nazwa docelowa) .pdb "
  3. " Linker -> Debugowanie -> Wygeneruj plik bazy danych programu "do" $ (OutDir) $ (TargetName).PDB”

Więc dostać te pliki:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C++ PDB
  3. Debug \ FooBar \ FooBar.pdb // linker PDB

  4. Debug \ FooBar.dll

  5. Debug \ FooBar.pdb // C++ PDB ag ain!
  6. Debug \ FooBarDll \ FooBar.pdb // Linker PDB

Moje rozwiązanie jest zastąpienie każdego "targetName" z "Nazwa_projektu", a potem będę się:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C++ PDB
  3. Debug \ FooBar \ FooBar.pdb // Linker PDB

  4. Debug \ FooBar.dll

  5. Debug \ FooBarDll.pdb // C++ PDB
  6. Debug \ FooBarDll \ FooBarDll.pdb // Linker PDB

Wtedy nie ma konfliktu!

Daj C/C++ WPB przyrostek może być lepiej, jak: "C/C++ -> Output Files -> Program nazwa bazy danych pliku" być "$ (IntDir) $ (Nazwa_projektu) _C.pdb"

0

Miałem ten sam problem, a ten link pomógł mi rozwiązać problem, zmieniając nazwę "symsrv.no" na "symsrv.yes" w folderze VS IDE.

2

umożliwi tworzenie PDB przez:

Kliknij prawym przyciskiem myszy na MyProject > Properties > Debugging:

  • C/C++ > General > Debug Information Output = Program Database (/Zi)
  • Linker > Debugging > Generate Debug Info = Yes (/DEBUG)

Clean myproject, uruchom Visual Studio (dla pewności), odbudować myproject . Folder wyjściowy powinien zawierać pliki * .pdb.

Jeśli Debug zoptymalizowane/code uwolnienie rozważyć wyłączenie optymalizacji poprzez

  • C++ > Optimization > Optmization = Disabled (/Od)
+0

Ponowne uruchamianie Visual Studio nie jest wymagane! – Elmue

Powiązane problemy