Sdílet prostřednictvím


Zadání symbolu (.pdb) a zdrojových souborů v ladicím programu sady Visual Studio (C#, C++, Visual Basic, F#)

Programová databáze (.pdb) soubory, označované také jako soubory symbolů, identifikátory mapování a příkazy ve zdrojovém kódu projektu na odpovídající identifikátory a pokyny v kompilovaných aplikacích. Tyto soubory mapování propojují debugger k vašemu zdrojovému kódu, což umožňuje ladění.

Když sestavujete projekt z integrovaného vývojového prostředí Visual Studio pomocí standardní konfigurace sestavení pro ladění, kompilátor vytvoří příslušné soubory symbolů. Tento článek popisuje, jak spravovat soubory symbolů v integrovaném vývojovém prostředí, například:

Podrobné vysvětlení souborů symbolů najdete v následujících tématech:

Jak fungují soubory symbolů

Soubor .pdb obsahuje informace o ladění a stavu projektu, které umožňují přírůstkové propojení konfigurace ladění vaší aplikace. Ladicí program sady Visual Studio používá soubory .pdb k určení dvou klíčových informací při ladění:

  • Název zdrojového souboru a číslo řádku, které se zobrazí v integrovaném vývojovém prostředí sady Visual Studio.
  • Kde se má aplikace zastavit pro zarážku.

Soubory symbolů také zobrazují umístění zdrojových souborů a volitelně i server, ze které je má načíst.

Ladicí program načte pouze soubory .pdb, které přesně odpovídají souborům .pdb vytvořeným při sestavování aplikace (tj. původní soubory .pdb nebo jejich kopie). Tato přesná duplikace je nezbytná, protože rozložení aplikací se může změnit i v případě, že se samotný kód nezměnil. Další informace najdete v tématu Proč Visual Studio vyžaduje soubory symbolů ladicího programu, aby přesně odpovídaly binárním souborům, se kterými byly vytvořeny?

Spropitné

Pokud chcete ladit kód, který není součástí zdrojového kódu vašeho projektu, například kód Windows nebo kód třetí strany, které váš projekt volá, musíte zadat umístění souborů .pdb externího kódu (a případně zdrojových souborů), které musí přesně odpovídat sestavení v aplikaci.

Kde ladicí program hledá symboly

Při ladění projektu v integrovaném vývojovém prostředí sady Visual Studio ladicí program automaticky načte soubory symbolů, které dokáže ve výchozím nastavení najít.

Poznámka

Při ladění spravovaného kódu na vzdáleném zařízení musí být všechny soubory symbolů umístěny buď na místním počítači, nebo v umístění zadané v možnostech ladicího programu.

Ladicí program vyhledá soubory symbolů v následujících umístěních:

  1. Složka projektu.

  2. Umístění zadané uvnitř knihovny DLL nebo spustitelného souboru (.exe).

    Ve výchozím nastavení, pokud jste vytvořili knihovnu DLL nebo soubor .exe v počítači, linker umístí úplnou cestu a název přidruženého souboru .pdb do knihovny DLL nebo souboru .exe. Ladicí program zkontroluje, zda soubor symbolů existuje na tomto místě.

  3. Stejná složka jako knihovna DLL nebo .exe soubor.

  4. Všechna umístění zadaná v možnostech ladicího programu pro soubory symbolů. Pokud chcete přidat a povolit umístění symbolů, přečtěte si téma Konfigurace umístění symbolů a možnosti načítání.

    • Libovolná složka mezipaměti místních symbolů.

    • Zadaná síť, internet nebo místní servery a umístění symbolů, například servery symbolů Společnosti Microsoft, pokud jsou vybrány. Visual Studio může stahovat soubory ladicích symbolů ze serverů, které implementují protokol symsrv. Visual Studio Team Foundation Server a nástroje pro ladění pro Windows jsou dva nástroje, které mohou používat servery symbolů.

      Mezi servery symbolů, které můžete použít, patří:

      veřejných serverů symbolů Společnosti Microsoft: K ladění chybového ukončení, ke kterému dochází při volání systémové knihovny DLL nebo knihovny jiného výrobce, často potřebujete systémové soubory .pdb. Systémové soubory .pdb obsahují symboly pro knihovny DLL systému Windows, soubory .exe a ovladače zařízení. Symboly pro operační systémy Windows, MDAC, IIS, ISA a .NET můžete získat z veřejných serverů symbolů Microsoftu.

      servery symbolů v interní síti nebo na místním počítači: Váš tým nebo společnost může vytvářet servery symbolů pro vlastní produkty a jako mezipaměť pro symboly z externích zdrojů. Server symbolů můžete mít na vlastním počítači.

      servery symbolů třetích stran: Externí poskytovatelé aplikací a knihoven systému Windows můžou poskytnout přístup k serveru symbolů na internetu.

Varování

Pokud používáte jiný server symbolů než veřejné servery symbolů Microsoftu, ujistěte se, že server symbolů a jeho cesta jsou důvěryhodné. Protože soubory symbolů můžou obsahovat libovolný spustitelný kód, můžete být vystaveni bezpečnostním hrozbám.

Konfigurace umístění souborů symbolů a možností načítání

Ladicí program ve výchozím nastavení hledá symboly v různých umístěních. Viz Kde ladicí program hledá symboly.

Na stránce Nástroje>Možnosti>Ladění>Symboly můžete:

  • Zadejte a vyberte cesty hledání pro soubory symbolů.
  • Zadejte servery symbolů pro součásti Microsoftu, Windows nebo třetích stran.
  • Zadejte moduly, pro které chcete nebo nechcete, aby ladicí program automaticky načítal symboly.
  • Při aktivním ladění změňte tato nastavení. Podívejte se na Načtení symbolů při ladění.

Určení umístění symbolů a možností načítání:

Poznámka

Tyto možnosti byly aktualizovány v sadě Visual Studio 2022 ve verzi 17.12 Preview 1.

  1. V sadě Visual Studio otevřete Nástroje>Možnosti>Ladění>Symboly (nebo Ladění>Možnosti>Symboly).

  2. V části Umístění souborů symbolů (.pdb),

    • Chcete-li použít servery symbolů společnosti Microsoft nebo NuGet.org server symbolů, zaškrtněte políčko.

    • Chcete-li přidat nové umístění serveru symbolů,

      1. Na panelu nástrojů vyberte symbol +.
      2. Do textového pole zadejte adresu URL (http), sdílenou síť nebo místní cestu k serveru symbolů nebo umístění symbolů. Doplňování výroků vám pomůže najít správný formát.

    Nástroje – Možnosti – Ladění – Stránka symbolů

    Nástroje – Možnosti – Ladění – Stránka symbolů

    Poznámka

    Prohledá se jenom zadaná složka. Je nutné přidat položky pro všechny podsložky, které chcete prohledávat.

    • Pro přidání nového umístění serveru symbolů Azure DevOps:

      1. Vyberte Nástroje / Možnosti / Ladění / Symboly k nové ikoně serveru ikonu na panelu nástrojů.

      2. V dialogovém okně Připojení k serveru symbolů Azure DevOps vyberte jeden z dostupných serverů symbolů a klikněte na Připojit.

        Další informace najdete v tématu Přidání serveru symbolů Azure Artifacts.

    • Pokud chcete změnit pořadí načítání umístění symbolů, použijte Ctrl+nahoru a Ctrl+dolůnebo ikony šipky nahoru a dolů.

    • Pokud chcete upravit adresu URL nebo cestu, poklikejte na položku nebo ji vyberte a stiskněte F2.

    • Pokud chcete položku odebrat, vyberte ji a pak vyberte ikonu -.

  3. (Volitelné) Pokud chcete zlepšit výkon načítání symbolů, zadejte v části Symboly mezipaměti v tomto adresářimístní cestu ke složce, do které mohou servery symbolů kopírovat symboly.

Poznámka

Neumisťujte místní mezipaměť symbolů do chráněné složky, jako je C:\Windows nebo podsložka. Místo toho použijte složku pro čtení i zápis.

Poznámka

Pokud máte nastavenou proměnnou prostředí _NT_SYMBOL_PATH, přepíše hodnotu nastavenou pod symboly Cache v tomto adresáři.

  1. Zadejte moduly, které chcete, aby ladicí program načetl ze souborů symbolů (.pdb) umístěných na při spuštění.

    • Vyberte Automaticky zvolte, jaké symboly modulů se mají vyhledat (doporučeno), aby visual Studio rozhodlo, jaké symboly se mají hledat a načítat. Ve výchozím nastavení sada Visual Studio automaticky načte symboly vytvořené otevřeným řešením a načte všechny další symboly potřebné k provádění běžných operací ladění. Tím se sníží počet souborů, které je potřeba vyhledat a načíst pomocí sady Visual Studio, což zlepšuje výkon ladicího programu. Další symboly můžete vynutit, aby se načetly kliknutím na odkaz Zadat filtry modulů.

    • Vyberte Vyhledat všechny symboly modulu, pokud nejsou vyloučeny, abyste přinutili Visual Studio načíst všechny symboly ve vašem ladicím procesu. Nedoporučuje se to, protože to může zpomalit proces ladění. Pokud vyberete tuto možnost, můžete v sadě Visual Studio vynutit ignorování určitých symbolů kliknutím na odkaz Zadat filtry modulů.

    • Vyberte Načíst všechny moduly, pokud nejsou vyloučeny (výchozí), pro načtení všech symbolů pro všechny moduly v umístění symbolového souboru, s výjimkou modulů, které výslovně vyloučíte. Pokud chcete některé moduly vyloučit, vyberte Zadejte vyloučené moduly, vyberte ikonu +, zadejte názvy modulů, které chcete vyloučit, a vyberte OK.

    • Pokud chcete načítat pouze vámi určené moduly z umístění souborů symbolů, vyberte Načíst pouze zadané moduly. Vyberte Zadejte zahrnuté moduly, vyberte ikonu +, zadejte názvy modulů, které chcete zahrnout, a pak vyberte OK. Soubory symbolů pro jiné moduly se nenačtou.

  2. Vyberte OK.

Zadání filtrů modulů

Automaticky zvolit, jaké symboly modulu se mají hledat a Hledat všechny symboly modulu, pokud nejsou vyloučeny poskytují větší kontrolu nad tím, jaké symboly se při ladění hledají. Zvolte Zadat filtry modulů a přizpůsobte své zkušenosti.

Ve výchozím nastavení se zobrazí následující dialogové okno, když je vybráno Automaticky zvolit, které symboly modulu se mají vyhledat:

Snímek obrazovky s určením filtrů modulů

Modul můžete do filtru přidat pomocí ikony +. Filtry modulů podporují jednoduché porovnávání zástupných znaků. Znak *odpovídá libovolné skupině znaků. Například *myproduct* bude odpovídat souborům, jako jemyproduct.utilities.dllaentrypoint.myproduct.exe, mimo jiné.

Existuje několik dalších možností, jak si své prostředí přizpůsobit:

  • Vždy načítat symboly umístěné vedle modulů poučuje Visual Studio, aby načítalo soubory PDB, které jsou uloženy v systému souborů vedle odpovídajících souborů .dll nebo .exe. To může být užitečné například při pokusu o ladění nasazené webové aplikace.

  • automaticky načíst další symboly v případě potřeby dává sadě Visual Studio pokyn, aby vyhledal symboly, aby prováděl běžné ladicí akce, jako je krokování, i když modul, ke kterému budete krokovat, není v projektu nebo ve filtru modulů. Způsob, jakým je vyhledávání určováno, může být ovlivněn vaším nastavením Pouze můj kód.

Pokud jste vybrali Vyhledat všechny symboly modulů, pokud nejsou vyloučené, dialogové okno filtru modulu vypadá takto:

Snímek obrazovky s určením vyloučených modulů

V tomto dialogovém okně můžete zvolit, pro které moduly nechcete, aby sada Visual Studio načetla symboly. V tomto scénáři se Visual Studio pokusí načíst symboly pro každý modul v ladicím procesu (včetně modulů třetích stran), pokud nepřidáte odpovídající filtr, který je vyloučí. Jediným jiným způsobem, jak bude toto chování změněno, je nastavení jen můj kód.

Další možnosti symbolů pro ladění

V Tools>Options>Debugging>General (nebo Debug>Options>General) můžete vybrat další možnosti symbolu :

  • Načtení exportů dll (pouze nativní)

    Načte exportní tabulky DLL pro C/C++. Podrobnosti viz exportních tabulek DLL. Čtení informací o exportu knihovny DLL zahrnuje určité náklady, takže načítání tabulek exportu je výchozí vypnuté. Můžete také použít dumpbin /exports v příkazovém řádku sestavení C/C++.

  • Povolit ladění na úrovni adresy a Zobrazit demontáž, pokud zdroj není k dispozici

    Vždy zobrazí disassemblaci, když nejsou nalezeny zdrojové soubory nebo soubory symbolů.

    Možnosti / Ladění / Obecné možnosti zpětného překladu

  • Povolení podpory zdrojového serveru

    Používá zdrojový server k ladění aplikace, pokud na místním počítači neexistuje žádný zdrojový kód nebo soubor .pdb neodpovídá zdrojovému kódu. Zdrojový server přijímá požadavky na soubory a vrací skutečné soubory ze správy zdrojového kódu. Zdrojový server běží pomocí knihovny DLL s názvem srcsrv.dll ke čtení souboru .pdb aplikace. Soubor .pdb obsahuje ukazatele na úložiště zdrojového kódu a také příkazy používané k načtení zdrojového kódu z úložiště.

    Příkazy, které srcsrv.dll mohou spouštět ze souboru .pdb aplikace, můžete omezit tak, že v souboru s názvem srcsrv.inizobrazí povolené příkazy. Umístěte soubor srcsrv.ini do stejné složky jako srcsrv.dll a devenv.exe.

    Důležitý

    Do souboru .pdb aplikace lze vložit libovolné příkazy, proto nezapomeňte vložit jenom příkazy, které chcete spustit, do souboru srcsrv.ini. Při každém pokusu o spuštění příkazu, který není v souboru srcsvr.ini, se zobrazí potvrzovací dialogové okno. Další informace naleznete v tématu výstraha zabezpečení: Ladicí program musí spustit nedůvěryhodný příkaz.

    U parametrů příkazu se neprovádí žádné ověření, proto buďte opatrní s důvěryhodnými příkazy. Například, pokud jste v srcsrv.iniuvedli cmd.exe, může škodlivý uživatel zadat na cmd.exe parametry, které by ho činily nebezpečným.

    Vyberte tuto položku a podřízené položky, které si přejete. Povolit zdrojový server pro částečná důvěryhodná sestavení (jenom spravovaná) a Vždy spouštět nedůvěryhodné příkazy zdrojového serveru bez výzvy může zvýšit rizika zabezpečení.

    Povolit možnosti zdrojového serveru

Možnosti symbolů kompilátoru

Když sestavíte projekt v integrovaném vývojovém prostředí Visual Studio se standardní konfigurací sestavení Ladění, vytvoří kompilátory jazyka C++ a spravované kompilátory příslušné soubory symbolů pro váš kód. V kódu můžete také nastavit možnosti kompilátoru.

Pokud chcete nastavit možnosti kompilátoru pro konfigurace sestavení v sadě Visual Studio, viz téma Nastavení konfigurací ladění a verzí.

Možnosti .NET

Sestavte pomocí /debug a vytvořte soubor .pdb. Aplikace můžete vytvářet pomocí /debug:full nebo /debug:pdbonly. Sestavení pomocí /debug:full generuje laditelný kód. Sestavení pomocí /debug:pdbonly generuje soubory .pdb, ale negeneruje DebuggableAttribute, která kompilátoru JIT říká, že jsou k dispozici informace o ladění. Máte-li v úmyslu vygenerovat soubory .pdb pro verzi sestavení, kterou nechcete ladit, použijte /debug:pdbonly. Další informace najdete v tématu /debug (možnosti kompilátoru jazyka C#) nebo /debug (Visual Basic).

Možnosti jazyka C/C++

  • <x>.pdb a <>.pdb soubory

    Při sestavování pomocí /ZI nebo /Zise vytvoří soubor .pdb pro C/C++. V jazyce Visual C++ /Fd možnost pojmenuje .pdb soubor, který kompilátor vytvoří. Při vytváření projektu v sadě Visual Studio pomocí integrovaného vývojového prostředí je možnost /Fd nastavena tak, aby se vytvořil soubor .pdb s názvem <projektu>.pdb.

    Pokud sestavíte aplikaci C/C++ pomocí souboru pravidel a zadáte /ZI nebo /Zi bez použití /Fd zadat název souboru, kompilátor vytvoří dva soubory .pdb:

    • VC<x>.pdb, kde <x> představuje verzi kompilátoru Microsoft C++, například VC11.pdb

      Soubor VC<x>.pdb ukládá všechny informace o ladění pro jednotlivé soubory objektů a nachází se ve stejném adresáři jako soubor pravidel projektu. Pokaždé, když vytvoří soubor objektu, kompilátor C/C++ sloučí ladicí informace do VC<x>.pdb. Takže i v případě, že každý zdrojový soubor obsahuje společné soubory hlaviček, jako je <windows.h>, jsou definice typů z těchto hlaviček uloženy pouze jednou, nikoli v každém souboru objektu. Vložené informace obsahují informace o typu, ale neobsahují informace o symbolech, jako jsou definice funkcí.

    • <projekt>.pdb

      Soubor <projektu>.pdb ukládá všechny informace o ladění pro .exe soubor projektu a nachází se v podadresáři \debug. Projekt <>souboru .pdb obsahuje úplné informace o ladění, včetně prototypů funkcí, nejen informací o typu nalezených v VC<x>.pdb.

    Jak VC<x>.pdb, tak <projekt>.pdb soubory umožňují přírůstkové aktualizace. Linker také vloží cestu k souborům .pdb do .exe nebo .dll souboru, který vytvoří.

  • Tabulka exportu DLL

    Pomocí dumpbin /exports zobrazíte symboly dostupné v tabulce exportu knihovny DLL. Symbolické informace z tabulek exportu knihovny DLL mohou být užitečné pro práci se zprávami Systému Windows, procedurami Systému Windows (WindowProcs), objekty COM, zařazováním nebo jakoukoli knihovnou DLL, pro kterou nemáte symboly. Symboly jsou k dispozici pro libovolnou 32bitovou systémovou knihovnu DLL. Volání jsou uvedena v pořadí volání, přičemž aktuální funkce (nejvíce vnořená) je v horní části.

    Když si přečtete dumpbin /exports výstup, uvidíte přesné názvy funkcí, včetně nealnumerických znaků. Zobrazení přesných názvů funkcí je užitečné pro nastavení zarážky u funkce, protože názvy funkcí je možné zkrátit jinde v ladicím programu. Další informace najdete v tématu dumpbin /exports.

Webové aplikace

Nastavte soubor web.config aplikace ASP.NET na režim ladění. Režim ladění způsobí, že ASP.NET generuje symboly pro dynamicky generované soubory a umožňuje ladicímu programu připojit se k aplikaci ASP.NET. Visual Studio to nastaví automaticky, když začnete ladit, pokud jste projekt vytvořili ze šablony webových projektů.

Načtení symbolů při ladění

K načtení symbolů nebo změně možností symbolů při ladění můžete použít moduly ,, zásobník volání ,, okno Lokální ,, Automatické ,nebo jakékoli okno Sledování ,. Další informace najdete v tématu Seznámení s tím, jak se ladicí program připojuje k aplikaci.

Práce se symboly v okně Moduly

Během ladění se v okně Moduly zobrazí moduly kódu, které ladicí program považuje za uživatelský kód, nebo můj kód, a stav jejich načítání symbolů. V okně Moduly můžete také monitorovat stav načítání symbolů, načíst symboly a změnit možnosti symbolů.

Monitorování nebo změna umístění symbolů nebo možností při ladění:

  1. Pokud chcete otevřít okno Moduly, při ladění vyberte Ladění>>Moduly (nebo stiskněte Ctrl + Alt + U).
  2. V okně Moduly klikněte pravým tlačítkem na záhlaví Stav symbolu, Soubor symbolů nebo na libovolný modul.
  3. V místní nabídce vyberte jednu z následujících možností:
Možnost Popis
Načíst symboly Zobrazuje se pro moduly s přeskočenými, nenalezenými nebo nenahranými symboly. Pokusí se načíst symboly z umístění zadaných na stránce Možnosti>Ladění>Symboly. Pokud se soubor symbolů nenajde nebo nenačte, spustí Průzkumníka souborů, abyste mohli zadat nové umístění pro vyhledávání.
Informace o načtení symbolů Zobrazuje umístění načteného souboru symbolů nebo umístění, která byla prohledána, pokud ladicí program nemůže soubor najít.
nastavení symbolů Otevře stránku Možnosti>Ladění>symbolů, kde můžete upravit a přidat umístění symbolů.
Vždy automaticky načíst Přidá vybraný soubor symbolů do seznamu souborů, které jsou automaticky načteny ladicím programem.

Použití stránek bez načtených symbolů nebo zdrojů

Ladicí program může proniknout do kódu, který nemá k dispozici symboly ani zdrojové soubory:

  • Ponořte se do kódu.
  • Rozdělte kód ze zarážky nebo výjimky.
  • Přepněte na jiné vlákno.
  • Změňte rámec zásobníku poklepáním na rámec v okně Zásobník volání.

V takovém případě ladicí program zobrazí stránky Žádné symboly nebyly načteny nebo Žádný zdroj nebyl načten, které vám pomohou najít a načíst potřebné symboly nebo zdroj.

stránka Nenačítala se žádné symboly

Chcete-li použít stránku dokumentu Žádné symboly nebyly načteny k tomu, abyste pomohli nalézt a načíst chybějící symboly:

  • Pokud chcete změnit cestu hledání, vyberte nevybranou cestu nebo vyberte Nová cesta nebo Nová cesta VSTS a zadejte nebo vyberte novou cestu. Vyberte Načíst, abyste prohledali cesty znovu a načetli soubor symbolů, pokud se najde.
  • Chcete-li přepsat všechny možnosti symbolů a zopakovat cesty hledání, vyberte Procházet, a vyhledejte <název spustitelného souboru>. Soubor symbolu se načte, pokud je nalezen, nebo Průzkumník souborů otevře, abyste mohli soubor symbolů vybrat ručně.
  • Pokud chcete otevřít stránku nastavení symbolů pro konfiguraci chování, vyberte Změnit nastavení symbolů (nebo zvolte Možnosti>Ladění>symbolů).
  • (Upřesnit) Chcete-li zobrazit rozložení kódu v novém okně jednou, vyberte zobrazit rozložení kódu, nebo vyberte dialogové okno Možnosti k nastavení možnosti, aby se při nenalezení zdrojových nebo symbolových souborů vždy zobrazovalo rozložení kódu. Další informace naleznete v tématu Zobrazení disassemblovaného kódu.
  • Chcete-li zobrazit hledaná umístění a výsledek, rozbalte Informace o načítání symbolů.
  • V případě kódu jazyka C# můžete také dekompilovat zdrojový kód ze stránek Nenačítány žádné symboly nebo stránky bez načtení zdroje.

Pokud ladicí program najde .pdb soubor po spuštění jedné z možností a může načíst zdrojový soubor pomocí informací v souboru .pdb, zobrazí zdroj. V opačném případě se zobrazí stránka Zdroj není načten, která popisuje problém s odkazy na akce, které mohou problém vyřešit.

Přidání cest hledání zdrojových souborů do řešení:

Můžete určit umístění, ve kterých ladicí program hledá zdrojové soubory, a vyloučit konkrétní soubory z hledání.

  1. Vyberte řešení v průzkumníku řešení , pak vyberte ikonu vlastností , stiskněte kombinaci kláves Alt+Enter, nebo klikněte pravým tlačítkem myši a vyberte možnost vlastnosti.

  2. Vyberte zdrojové soubory pro ladění.

    stránka Ladění zdrojových souborů

  3. V části Adresáře obsahující zdrojový kódzadejte nebo vyberte umístění zdrojového kódu, která chcete vyhledat. Pomocí ikony Nový řádek můžete přidat další umístění, ikony šipek nahoru a dolů změnit jejich pořadí, nebo ikony X je odstranit.

    Poznámka

    Ladicí program prohledá pouze zadaný adresář. Je nutné přidat položky pro všechny podadresáře, které chcete hledat.

  4. V části Nehledejte tyto zdrojové soubory, zadejte názvy zdrojových souborů, které chcete vyloučit z hledání.

  5. Vyberte OK nebo Použít.