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?
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.
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)
-
Static lib Project: Wygeneruj pdb o tej samej nazwie co static lib:
- Otwórz
Solution Explorer
z menuView
. - 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
- zauważ, że
- 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.
- Otwórz
-
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
, dodawanieYourLib.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)
-
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.
-
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.
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
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.
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.
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