2008-09-25 23 views
10

Mam rozwiązanie VS (2008) składające się z kilku projektów, nie wszystkie w tej samej przestrzeni nazw. Po zbudowaniu rozwiązania wszystkie biblioteki DLL używane przez projekt najwyższego poziomu TopProject są kopiowane do folderu TopProject \ bin \ debug TopProject \ bin \ debug. Jednak odpowiednie pliki .pdb są kopiowane tylko w przypadku niektórych innych projektów. To jest ból, na przykład podczas korzystania z NDepend.Pliki PDB w pakiecie VisualStudio bin debug folders

W jaki sposób VS decyduje, które pliki .pdb skopiować do folderów bin/debug wyższego poziomu? Jak mogę przekonać VS do skopiowania innych?


Edit:

Referencje są następujące: wszystkie pliki DLL są kopiowane do centralnej lokalizacji, bez ich pdbs. TopProject tylko ma odniesienia do tych skopiowanych bibliotek dll; same biblioteki DLL jednak najwyraźniej wiedzą, gdzie znajdują się ich pdbs i (większość z nich) są poprawnie kopiowane do folderu debugowania.

+0

Czy wszystkie projekty (projekt, a nie plik * .dll/* .exe) odnoszą się do "TopProject"? – TcKs

+0

Nie, żaden z nich: zobacz moją edycję pytania. –

+0

Mam kilka plików pdb z me.i pobranych ze strony pobierania Pythona jako dodatek wizualny lub coś w tym stylu. Jak zaimportować go do visualstudio? –

Odpowiedz

11

Od MSDN:

pliku bazy danych programu (PDB) posiada debugowanie i stan projektu informacyjny, który umożliwia łączenie przyrostowe konfiguracji Debug programu. Plik PDB jest tworzony podczas kompilowania programu C/C++ za pomocą /ZI lub/Zi lub Visual Basic Basic/C#/JScript .NET z /debug.

Tak to wygląda na „problem” tutaj (z braku lepszego słowa) jest to, że niektóre z DLL są budowane w trybie debugowania (a więc emitujące PDBs), a niektóre budowane są w trybie zwolnienia (stąd brak emisji PDB). W takim przypadku powinno to być łatwe do naprawienia - przejdź do każdego projektu i zaktualizuj jego ustawienia kompilacji. Byłby to domyślny scenariusz, jeśli nie wykonałeś żadnych zmian w opcjach wiersza poleceń.

Jednak stanie się to trudniejsze, jeśli tak nie jest. Może jesteś w trybie zwolnienia lub debugowania. Teraz należy spojrzeć na opcje kompilacji wiersza poleceń (określone we właściwościach projektu) dla każdego projektu. Zaktualizuj je odpowiednio do/debug, jeśli chcesz, aby debugger, lub usuń go, jeśli nie.

Edycja w odpowiedzi na Edytuj

Tak, DLL „wie”, że mają PDBs i mają ścieżek do nich, ale to nie znaczy zbyt wiele. Kopiowanie samych bibliotek DLL do danego katalogu, o czym już wspomniały inne osoby, nie rozwiąże problemu. Potrzebujesz także PDB.

Kopiowanie pojedynczych plików w systemie Windows, z wyjątkiem niektórych plików typu "bundle" (nie mam na to pojęcia firmy Microsoft, ale "są kompletne pakiety HTML") nie kopiuje powiązanych plików. Pliki DLL nie są składane w "pakiecie", więc ich kopiowanie pozostawia PDB.

Powiedziałbym, że jedyną odpowiedzią będzie aktualizacja procesu pobierania bibliotek DLL do tych centralnych lokalizacji i uwzględnienie WPB ... Chciałbym, aby udowodniono, że jest źle, chociaż !

+0

nie, nie takie proste. Wszystkie projekty są wbudowane w debugowanie i wszystkie mają te same opcje spełniania. –

+0

Mam kilka plików pdb z me.i pobranych ze strony pobierania Pythona jako dodatek wizualny lub coś w tym stylu. Jak zaimportować go do visualstudio? –

+0

@John Rudy Po sprawdzeniu wszystkich ustawień, upewnij się, że wyczyścisz rozwiązanie i przebudujesz ... – Nescio

2

Po pierwsze, nigdy niczego nie zakładaj. Wyczyść rozwiązanie, przebuduj go w trybie debugowania i sprawdź, czy wszystkie pliki pdb zostały utworzone.Jeśli nie, to twój problem.

Jeśli są one tworzone i nie wszystkie są kopiowane, można obejść to, tworząc zdarzenie kompilacji pocztowej, które ręcznie kopiuje pliki pdb do żądanych lokalizacji. Oczywiście, jest to tylko obejście tego problemu.

Jedyne, co mogę wymyślić, to to, że plik rozwiązania został uszkodzony. Możesz otworzyć plik .sln jako plik xml i sprawdzić jego zawartość. Sprawdź konfigurację projektów, które działają zgodnie z oczekiwaniami i porównaj je z tymi, które się nie spełniają. Jeśli nic nie widzisz, musisz powtórzyć to na poziomie projektu. Porównaj działające pliki projektu .csproj (lub cokolwiek innego) z tymi, które nie działają.


Edycja w odpowiedzi edytować:

Jeśli jesteś po prostu ręcznie kopiując rzeczy wokół, a następnie ręcznie skopiować pdbs również. Dll nie powinien "wiedzieć" niczego o Pdbs, jak sądzę. Po prostu przyklej je do katalogu docelowego i idź napić się kawy. Zrelaksować się.

+2

W rzeczywistości, pliki DLL (debug) wiedzą, gdzie są ich pdbs, gdzieś w nich zakodowana jest ścieżka. I tak, mógłbym to zrobić ręcznie (lub dostosować automatyczne kopiowanie), ale chciałbym wiedzieć, dlaczego ta cholerna rzecz zachowuje się tak, jak ona. A kto powiedział, że nie jestem zrelaksowany? Jestem zrelaksowany! Cholera! Aaaargh! :) –

2

Sprawdź, czy czyścisz rozwiązanie, czy jest ono rzeczywiście czyszczone. Widziałem VS pozostawić pliki wiszące w katalogu bin/debug nawet po czyszczeniu. Usuń katalog bin/debug na wszystkich twoich projektach i odbuduj go.

+0

Widziałem VS też to zrobić. Istnieje ustawienie, które może określać, co jest wyczyszczone dla FYI. – TinyRacoon

3

Jak napisano w innych postach, możesz mieć problem z kompilatorem/korupcją.

Ale, jak powiedział Will, jeśli pliki pdb są tworzone, ale nie pojawiają się tam, gdzie ich potrzebujesz, utwórz krok po kompilacji. Oto krok po kompilacji, który definiuję dla każdego projektu w moim rozwiązaniu. Zapewnia to, że wszystkie pliki wyjściowe są kopiowane do wspólnego katalogu.

Jeśli twój plik proj znajduje się w katalogu \ SolutionDir \ ProjDir, to pierwsza linia postprodukcji skopiuje pliki wyjściowe do \ Solution \ Bin \ Release lub \ Solution \ Bin \ Debug. Druga linia kopiuje plik pdb, jeśli jest to kompilacja debugowania. Nie kopiuję pliku pdb dla wersji Release.

Tak więc \ SolutionDir \ Bin zawiera teraz wszystkie pliki wyjściowe w jednym miejscu.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir) 
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir) 
+0

Mam kilka plików pdb z me.i pobranych ze strony pobierania Pythona jako dodatek wizualny lub coś w tym stylu. Jak zaimportować go do visualstudio? –

Powiązane problemy