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

Soubory databáze programu (.pdb), 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í ladicí program se zdrojovým kódem, který umožňuje ladění.

Když sestavíte projekt z integrovaného vývojového prostředí sady Visual Studio se standardní konfigurací sestavení 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 vytváření aplikace (tj. původních souborů .pdb nebo kopií). 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?

Tip

Pokud chcete kód ladit mimo zdrojový kód projektu, například kód Windows nebo kód třetí strany, musíte určit umístění souborů .pdb externího kódu (a volitelně zdrojových souborů), které musí přesně odpovídat sestavením 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ěné buď na místním počítači, nebo v umístění určeném 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 souboru přidruženého souboru .pdb do souboru DLL nebo .exe . Ladicí program zkontroluje, jestli v tomto umístění existuje soubor symbolů.

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

  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 stáhnout soubory symbolů ladění ze serverů symbolů, které implementují symsrv protokol. Visual Studio Team Foundation Server a Nástroje 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é servery symbolů Společnosti Microsoft: K ladění chybového ukončení, ke kterému dochází během volání systémové knihovny DLL nebo knihovny třetí strany, č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 mohou vytvářet servery symbolů pro vlastní produkty a jako mezipaměť pro symboly z externích zdrojů. Symbolový server 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 poskytovat přístup k serveru symbolů na internetu.

      Upozorňující

      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í kontroluje symboly v různých umístěních. Podívejte se, kde ladicí program hledá symboly.

Na stránce Možnosti nástrojů>>Ladění>symbolů 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é provedete nebo nechcete, aby ladicí program automaticky načítá symboly.
  • Při aktivním ladění změňte tato nastavení. Viz Načtení symbolů při ladění.

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

  1. V sadě Visual Studio otevřete symboly ladění>možností>nástrojů>(nebo symboly možností>ladění).>

  2. V části Umístění souboru symbolu (.pdb)

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

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

      1. + Vyberte symbol na panelu nástrojů.
      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ýrazů vám pomůže najít správný formát.

      Tools - Options - Debugging - Symbols page

      Tools - Options - Debugging - Symbols page

      Poznámka:

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

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

      1. Vyberte ikonu Tools/ Options/ Debugging/Symbols new server icon na panelu nástrojů.

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

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

    • Pokud chcete změnit pořadí načítání pro umístění symbolů, použijte klávesy 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 klávesu 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áři cestu k místní složce, do které můžou 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 pro projekty C++ nastavenou _NT_SYMBOL_PATH proměnnou prostředí, přepíše se hodnota nastavená v části Symboly mezipaměti v tomto adresáři.

  4. Zadejte moduly, které má ladicí program načíst z umístění souboru Symbol (.pdb) při spuštění.

    • Vyberte Načíst všechny moduly, pokud není vyloučeno (výchozí) a načtěte všechny symboly pro všechny moduly v umístění souboru symbolů s výjimkou modulů, které výslovně vyloučíte. Pokud chcete některé moduly vyloučit, vyberte Zadat vyloučené moduly, vyberte + ikonu, zadejte názvy modulů, které chcete vyloučit, a vyberte OK.

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

  5. Vyberte OK.

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

Další možnosti symbolů můžete vybrat v >nástrojích Možnosti>ladění>Obecné (nebo Obecné možnosti>ladění):>

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

    Načte tabulky exportu knihovny DLL pro C/C++. Podrobnosti najdete v tématu Tabulky exportu knihovny DLL. Informace o exportu knihovny DLL pro čtení zahrnují určité režijní náklady, takže načítání tabulek exportu je ve výchozím nastavení vypnuté. Můžete také použít dumpbin /exports v příkazovém řádku sestavení C/C++.

  • Povolení ladění na úrovni adresy a zobrazení zpětného překladu, pokud zdroj není k dispozici

    Při nenalezu zdrojových souborů nebo souborů symbolů vždy zobrazí zpětné překlady.

    Options / Debugging / General disassembly options

  • Povolení podpory zdrojového serveru

    Používá zdrojový server k ladění aplikace v případě, že na místním počítači není žá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 lze spustit ze souboru .pdb aplikace, můžete omezit výpisem povolených příkazů v souboru s názvem srcsrv.ini. 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 Upozornění zabezpečení: Ladicí program musí spustit nedůvěryhodný příkaz.

    Parametry příkazu nejsou ověřovány, proto buďte s důvěryhodnými příkazy opatrní. Pokud jste například v souboru srcsrv.ini uvedli cmd.exe, může škodlivý uživatel zadat parametry na cmd.exe, které by to zneškodnily.

    Vyberte tuto položku a podřízené položky, které chcete. Povolte 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ůžou zvýšit rizika zabezpečení.

    Enable source server options

Možnosti symbolů kompilátoru

Když sestavíte projekt z integrovaného vývojového prostředí sady Visual Studio se standardní konfigurací sestavení ladění , vytvoří kompilátory 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, přečtěte si téma Nastavení konfigurací ladění a vydaných verzí.

Možnosti .NET

Vytvořte soubor .pdb pomocí příkazu /debug. Aplikace můžete sestavovat 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ý říká kompilátoru JIT, že ladicí informace jsou k dispozici. Pokud chcete vygenerovat soubory .pdb pro sestavení vydané verze, které 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++

  • Soubory VC<x.pdb> a <project.pdb>

    Soubor .pdb pro C/C++ se vytvoří při sestavování pomocí /ZI nebo /Zi. V jazyce Visual C++ pojmenuje možnost /Fd soubor .pdb, 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 na vytvoření souboru .pdb s názvem <project.pdb>.

    Pokud sestavíte aplikaci C/C++ pomocí souboru pravidel a zadáte /ZI nebo /Zi bez použití /Fd k zadání názvu 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í jednotlivých souborů 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 když každý zdrojový soubor obsahuje společné soubory hlaviček, jako <je windows.h>, definice typedefs z těchto hlaviček jsou 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í.

    • <project.pdb>

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

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

  • Tabulky exportu knihovny DLL

    Slouží dumpbin /exports k zobrazení symbolů dostupných 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 všechny 32bitové systémové knihovny DLL. Volání jsou uvedena v pořadí volání s aktuální funkcí (nejhlouběji vnořených) nahoře.

    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 /export.

Webové aplikace

Nastavte soubor web.config aplikace ASP.NET na režim ladění. Režim ladění způsobí, že technologie ASP.NET generuje dynamicky generované soubory a umožňuje ladicímu program připojit k aplikaci technologie 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í, místní hodnoty, automatické hodnoty nebo okno kukátka. Další informace najdete v tématu Seznámení s připojením ladicího programu k aplikaci.

Práce se symboly v okně Moduly

Během ladění okno Moduly zobrazuje moduly kódu, které ladicí program považuje za uživatelský kód, nebo můj kód a stav načítání jejich 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, vyberte při ladění moduly>systému Windows>(nebo stiskněte kombinaci kláves Ctrl + Alt + U).
  2. V okně Moduly klikněte pravým tlačítkem myši na záhlaví Stav symbolu nebo Soubor symbolů nebo jakýkoli modul.
  3. V místní nabídce vyberte jednu z následujících možností:
Možnost Popis
Načtení symbolů Zobrazí se pro moduly s přeskočenými, nenalezeno nebo nenačítanými symboly. Pokusí se načíst symboly z umístění zadaných na stránce Možnosti>ladění>symbolů. Pokud se soubor symbolů nenajde nebo nenačte, spustí se Průzkumník souborů, abyste mohli zadat nové umístění pro vyhledávání.
Informace o načtení symbolu 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 načíst automaticky 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 bez zdrojových načtených stránek

Ladicí program může rozdělit do kódu, který nemá k dispozici symbol nebo zdrojové soubory:

  • Vstupte do kódu.
  • Rozdělte kód ze zarážky nebo výjimky.
  • Přepněte na jiné vlákno.
  • Rámeček zásobníku můžete změnit poklikáním na rámeček v okně Zásobník volání.

V takovém případě ladicí program zobrazí stránky Bez načtených symbolů nebo Žádný zdroj , které vám pomůžou najít a načíst potřebné symboly nebo zdroj.

No Symbols Loaded page

Pokud chcete použít stránku dokumentu Bez symbolů načtených k vyhledání a načtení chybějících symbolů:

  • Pokud chcete změnit cestu hledání, vyberte nevybranou cestu nebo vyberte Novou cestu nebo Novou cestu VSTS a zadejte nebo vyberte novou cestu. Vyberte Načíst , abyste znovu hledali cesty, a pokud se najde, načtěte soubor symbolů.
  • Pokud chcete přepsat všechny možnosti symbolu a opakovat cesty hledání, vyberte Procházet a najít <spustitelný název>. Soubor symbolů 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 zpětný překlad v novém okně jednou, vyberte zobrazit demontáž nebo vyberte Dialogové okno Možnosti a nastavte možnost vždy zobrazit demontáž, pokud nejsou nalezeny zdrojové soubory nebo soubory symbolů. Další informace naleznete v tématu Zobrazení zpětného překladu kódu.
  • Pokud chcete zobrazit hledané umístění a výsledek, rozbalte informace o načtení symbolu.
  • U kódu jazyka C# můžete také zvolit dekompilování zdrojového kódu ze stránek Bez načtených symbolů nebo Bez načtených zdrojů.

Pokud ladicí program najde soubor .pdb 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 Bez načtení zdroje, která popisuje problém, s odkazy na akce, které by mohly 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ík řešení a pak vyberte ikonu Vlastnosti, stiskněte Alt+Enter nebo klikněte pravým tlačítkem myši a vyberte Vlastnosti.

  2. Vyberte Ladit zdrojové soubory.

    Debug source files page

  3. V části Adresáře obsahující zdrojový kód zadejte 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 se šipkou nahoru a dolů a změnit jejich pořadí nebo je odstranit ikonou X.

    Poznámka:

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

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

  5. Vyberte OK nebo Použít.