Symbole debugowania biblioteki statycznej

W VS2010 istnieje opcja generowania informacji o debugowaniu dla exes/DLL Pod linker, ale nie ma takiej opcji pod librarian dla libs. Czy informacje o debugowaniu są osadzone w bibliotece statycznej?

Istnieje opcja we Właściwościach C/C++ dla Nazwa pliku bazy danych programu dla bibliotek libs, EXE i bibliotek DLL. Domyślnie trafia do mojego pośredniego katalogu i nosi nazwę projektu libs, ale nazywa się vc$(PlatformToolsetVersion).pdb dla exes/DLL. Co to jest pdb z tej opcji i czym różni się od pdb w opcji linker?

Jeśli dostarczam bibliotekę z bibliotekami i nagłówkami, jak Mogę dostarczyć symbole debugowania użytkownikowi mojej biblioteki?

Author: David, 2011-09-28

5 answers

W przypadku stosowania /ZI LUB /Zi (C/C++ -> General -> Debug Information Format), Następnie tworzony jest vc$(PlatformToolsetVersion).pdb, który zawiera informacje o debugowaniu dla wszystkich utworzonych plików .obj. Jeśli używasz na przemian /Z7, informacje o debugowaniu zostaną osadzone w pliku .obj, a następnie osadzone w pliku .lib. Jest to prawdopodobnie najprostszy sposób dystrybucji informacji o debugowaniu dla statycznej biblioteki .

Nie radziłbym jednak dystrybucji statycznej biblioteki, ponieważ generalnie jest ona powiązana z konkretną wersją kompilator.

 48
Author: mloar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 10:55:03

Rozszerzenie na poprzednich odpowiedzi, dla tych, którzy potrzebują pełnego how-to(VS 2013).

Zauważ, że powinno to dotyczyć komentarzy ^^powyżej dotyczących problemów z VS2013.

Metoda 1: Baza Danych Programu (.pdb) Way (/Zi lub / ZI)

  1. Static lib Project: Wygeneruj pdb o tej samej nazwie co static lib:

    • Otwórz Solution Explorer z menu View.
    • Kliknij prawym przyciskiem myszy swój statyczny projekt lib, Wybierz Properties
    • Edytuj Configuration Properties->C/C++->General->Debug Information do /Zi lub /ZI
      • zauważ, że /ZI pozwala na" edycję i kontynuację " edycji podczas debugowania
    • Edytuj Configuration Properties->C/C++->Output Files->Program Database File Name do $(OutDir)$(TargetName).pdb
    • teraz skompiluj go i zwróć uwagę, gdzie Twój plik.lib i YourLib.pdb tak.
  2. Projekt aplikacji: Połącz plik wykonywalny ze statycznym plikiem lib i nowym plikiem PDB:

    • ponownie przejdź do właściwości projektu, ale tym razem dla aplikacji projekt
    • ponownie, edytuj Debug Information właściwość w razie potrzeby.
    • Edytuj Configuration Properties->Linker->General->Additional Library Directories, dodawanie własnego katalogu "libs" lub dowolnego katalogu, który planujesz zachować / skopiować YourLib.lib i YourLib.pliki pdb.
    • Edytuj Configuration Properties->Linker->Input->Additional Dependencies, dodawanie YourLib.lib (brak ścieżki z przodu)
    • Teraz skopiuj oba Twoje lib.lib i YourLib.pdb do katalogu podanego powyżej.

Metoda 2: osadzone symbole (nie .pdb) Way (/Z7)

  1. Static lib Project: generowanie statycznej lib z osadzonymi symbolami debugowania

    • jak w metodzie 1, Przejdź do właściwości projektu
    • jak w metodzie 1, zmodyfikuj swoje Debug Information, ale tym razem do /Z7
    • jak w metodzie 1, skompiluj i zanotuj gdzie TwójLib jest generowany.
  2. Projekt aplikacji: Link wykonywalny ze statycznym lib

    • jak w metodzie 1, Przejdź do właściwości projektu
    • jak w metodzie 1, zmodyfikuj swoją Debug Information właściwość w razie potrzeby
    • jak w metodzie 1, edit Additional Library Directories
    • jak w metodzie 1, Edycja Additional Dependencies
    • / Align = "left" / lib do katalogu określonego w Additional Library Directories

Dyskusja:

  • zalety Z7? to jest prostsze, i" jeden plik " sposób na to. Wszystkie informacje o debugowaniu znajdują się w pliku lib.
  • wady Z7? W 2008 roku firma została założona w 2009 roku, a w 2009 roku firma została założona w 2009 roku, a w 2009 roku firma została założona w 2009 roku.]}
  • dlaczego nie mogę określić Debug Information Ustawienia dla projektu aplikacji? ten post dotyczy tego, jak uruchomić debugowanie w statycznym kodzie lib. Ten sam wybór "Metoda 1 vs Metoda 2" dotyczy również projektu aplikacji.
 32
Author: bunkerdive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 20:33:17

Zauważyłem, że w VS2013 można ustawić nazwę pliku bazy danych programu w zakładce Pliki wyjściowe C / C++. Zmiana z domyślnego na coś w rodzaju $(OutDir)$(TargetName).pdb rozwiązuje problem

 16
Author: MilesDavies192,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 09:16:12

Biblioteki statyczne są implementowane do programów, które ich używają.

Jeśli program, który ich używa, używa symboli debugowania, skompilowany kod biblioteki w tym programie również będzie zawierał symbole.

PDB info z Wikipedii:

Gdy symbole debugowania są osadzone w samym pliku binarnym, plik może następnie rosną znacznie większe (czasami o kilka megabajtów). Na unikaj tego dodatkowego rozmiaru, nowoczesnych kompilatorów i wczesnego debugowania komputerów mainframe systemy wyprowadzają symboliczne informacji w osobnym pliku; dla Kompilatory Microsoft, ten plik nazywa się plik PDB.

 5
Author: Pubby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 20:49:37

Dziwne zachowanie w VS2012. Budowanie od podstaw (lub z opcją / w nmake) spowoduje powstanieplik pdb. Teraz Usuń .lib i .pdb i rerun nmake (bez /A oczywiście, aby uruchomić tylko link) i nie .plik pdb jest wyjściowy.

 1
Author: nothrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 03:10:30