2012-06-19 8 views
13

Używam, aby zawsze brać pod uwagę końcowy plik wykonywalny lub bibliotekę DLL po debugowaniu i utworzeniu pliku z dowolnym IDE. Teraz próbuję Visual C++ 2010, w poszukiwaniu najlepszego wydania, bez śmieci i niepotrzebnych odniesień. Tak, stworzyłem nowe rozwiązanie z dwoma projektami: plik wykonywalny i jego biblioteka dll. VC++ stworzył wiele plików pośrednich między kodem a plikiem końcowym. Otworzyłem .exe i .dll za pomocą edytora szesnastkowego i zobaczyłem coś, co mi się nie podoba. Gdzieś w pliku znajduje się bezwzględna ścieżka do pliku .PDB.Usuwanie odwołań do pliku PDB z opublikowanego pliku

Dlaczego? Jak mogę go usunąć z VC++?

Musi być na to jakieś polecenie wstępnego procesora. Jaki jest pożytek z bezwzględnej ścieżki do pliku .PDB, np. "D: \ Moje projekty \ Project1 \ Release \ Project1.pdb" wewnątrz pliku binarnego pliku, który będzie rozpowszechniany na komputerach z różnymi folderami? Poza tym nie lubię, gdy jedna z tras mojego dysku została zapisana w pliku binarnym, który chcę udostępnić innym osobom. Jestem w trybie Release, nie widzę użycia tych niepotrzebnych informacji. Jak mogę go usunąć? Dzięki!

+0

Możliwa duplikat tego [pytanie] [1]? Możesz usunąć ścieżkę do WPB. Proszę jednak zachować odniesienie do WPB. [1]: http: // stackoverflow.com/questions/7596628/strip-the-path-to-the-pdb – mox

Odpowiedz

7

Przeczytaj dokumentację PDB Files na MSDN: Plik

Baza danych programu (PDB) posiada debugowania i projektu informacji o stanie, który umożliwia przyrostowe łączenie konfiguracji Debug swojego programu. Plik PDB jest tworzony podczas kompilowania programu C/C++ za pomocą/ZI lub/Zi lub programu Visual Basic/C#/JScript .NET za pomocą/debug.

W Visual C++ opcja/Fd określa plik PDB utworzony przez kompilator. Podczas tworzenia projektu w Visual Studio przy użyciu kreatorów, opcja/Fd jest ustawiona na tworzenie projektu PDB o nazwie project.PDB.

Zauważ, że ścieżka bezwzględna jest wymienione w dokumentacji:

Visual Studio debugger używa pliku project.PDB utworzonego przez łącznik bezpośrednio i osadza bezwzględną ścieżkę do WPB w EXE lub Plik DLL.

Zawsze można iść do Projektu Właściwości> Linker> Debugowanie> Generate Debug Info i ustawić ją na nr

+0

To dziwne, że nawet jeśli jestem w trybie Release, pliki .PDB są nadal generowane. Dziękujemy za odpowiedź – ali

+0

@ali: To jest domyślne ustawienie podczas tworzenia nowego projektu. Zawsze możesz go wyłączyć. Pamiętaj, że PDB jest wymagany tylko do * debugowania * i * łączenia przyrostowego * i nie musisz go wysyłać (chyba że chcesz, aby klienci mogli debugować). – dirkgently

+3

O.K. Dzięki! Teraz się zmieniłem i to działa! Nienawidzę widzieć ciągów ujawnianych w kodzie binarnym! – ali

9

Można użyć /pdbpath:none usunąć pełną kwalifikowaną nazwę ścieżki pliku PDB, ale zachować tylko nazwa i rozszerzenie WPB. Zachowanie nazwy (i rozszerzenia) PDB dla opublikowanych obrazów jest jedynym sposobem debugowania obrazu, który jest błędny. Obrazy systemu Windows prawie zawsze zawierają nazwę i rozszerzenie PDB!

+3

To jest lepsze rozwiązanie, jednak nowsze wersje zmieniły nazwę na opcję i musisz teraz przekazać link '/ pdbaltpath:% _ PDB%' do linkera. –

2

Jeśli nie przeszkadza przy użyciu zewnętrznego narzędzia i nie można odbudować swój moduł z/pdbpath: Brak, peupdate narzędzie może być wykorzystywane do listy, usunąć lub zmienić ciąg PDB w modułu wykonawczego:

http://bytepointer.com/tools/index.htm#peupdate

można użyć narzędzia w następujący sposób, aby wyczyścić drogę PDB:

peupdate -c <module_path>