Ange symbol (.pdb) och källfiler i Visual Studio-felsökningsprogrammet (C#, C++, Visual Basic, F#)
Programdatabasfiler (.pdb), som även kallas symbolfiler, kartlägger identifierare och satser i projektets källkod till motsvarande identifierare och instruktioner i kompilerade applikationer. Dessa mappningsfiler länkar felsökningsprogrammet till källkoden, vilket möjliggör felsökning.
När du skapar ett projekt från Visual Studio IDE med standardkonfigurationen för felsökningsversion skapar kompilatorn lämpliga symbolfiler. Den här artikeln beskriver hur du hanterar symbolfiler i IDE, till exempel:
- Konfigurera platsen för symbolfiler
- Läs in symboler vid felsökning av
- Kompilatoralternativ för symboler.
En detaljerad förklaring av symbolfiler finns i följande:
Så här fungerar symbolfiler
Filen .pdb innehåller felsöknings- och projekttillståndsinformation som möjliggör inkrementell länkning av en felsökningskonfiguration för din app. Visual Studio-felsökningsprogrammet använder .pdb--filer för att fastställa två viktiga informationsdelar vid felsökning:
- Källfilens namn och radnummer som ska visas i Visual Studio IDE.
- Var i appen att stanna vid en brytpunkt.
Symbolfiler visar också platsen för källfilerna, och eventuellt servern att hämta dem från.
Felsökningsprogrammet läser bara in .pdb- filer som exakt matchar de .pdb- filer som skapades när en app skapades (dvs. den ursprungliga .pdb filer eller kopior). Den här exakta dupliceringen är nödvändig eftersom layouten för appar kan ändras även om själva koden inte har ändrats. Mer information finns i Varför kräver Visual Studio felsökningssymbolfiler för att exakt matcha de binära filer som de skapades med?
Tips
Om du vill felsöka kod utanför projektets källkod, till exempel Windows-kod eller kod från tredje part som projektet anropar, måste du ange platsen för den externa kodens .pdb -filer (och eventuellt källfilerna), som måste exakt matcha versionerna i din app.
Där felsökningsprogrammet letar efter symboler
När du felsöker ett projekt i Visual Studio IDE läser felsökningsprogrammet automatiskt in symbolfiler som det kan hitta som standard.
Obs
När du felsöker hanterad kod på en fjärrenhet måste alla symbolfiler finnas antingen på den lokala datorn eller på en plats anges i felsökningsalternativen.
Felsökningsprogrammet söker efter symbolfiler på följande platser:
Projektmappen.
Den plats som anges i DLL-filen eller den körbara filen (.exe).
Om du som standard har skapat en DLL-fil eller en .exe fil på datorn placerar länkaren den fullständiga sökvägen och filnamnet för den associerade .pdb- fil i DLL-filen eller .exe filen. Felsökningsprogrammet kontrollerar om symbolfilen finns på den platsen.
Samma mapp som DLL- eller .exe-filen.
Alla platser som anges i felsökningsalternativen för symbolfiler. Information om hur du lägger till och aktiverar symbolplatser finns i Konfigurera symbolplatser och inläsningsalternativ.
Alla lokala symbolcachemappar.
Angivna nätverks-, Internet- eller lokala symbolservrar och platser, till exempel Microsoft-symbolservrar om de väljs. Visual Studio kan ladda ned felsökningssymbolfiler från symbolservrar som implementerar
symsrv
protokollet. Visual Studio Team Foundation Server och Felsökningsverktyg för Windows är två verktyg som kan använda symbolservrar.Symbolservrar som du kan använda är:
offentliga Microsoft-symbolservrar: Om du vill felsöka en krasch som inträffar under ett anrop till en system-DLL eller till ett bibliotek från tredje part behöver du ofta system .pdb filer. System .pdb-filer innehåller symboler för Windows DLL:er, .exe filer och enhetsdrivrutiner. Du kan hämta symboler för Windows-operativsystem, MDAC, IIS, ISA och .NET från de offentliga Microsoft-symbolservrarna.
symbolservrar i ett internt nätverk eller på din lokala dator: Ditt team eller företag kan skapa symbolservrar för dina egna produkter och som cacheminne för symboler från externa källor. Du kan ha en symbolserver på din egen dator.
tredjepartssymbolservrar: Tredjepartsleverantörer av Windows-program och -bibliotek kan ge åtkomst till symbolservern på Internet.
Varning
Om du använder en annan symbolserver än de offentliga Microsoft-symbolservrarna kontrollerar du att symbolservern och dess sökväg är tillförlitliga. Eftersom symbolfiler kan innehålla godtycklig körbar kod kan du utsättas för säkerhetshot.
Konfigurera plats för symbolfiler och inläsningsalternativ
Felsökningsprogrammet kontrollerar olika platser efter symboler som standard. Se där felsökningsprogrammet letar efter symboler.
På sidan Verktyg>Alternativ>Felsökning av>symboler kan du:
- Ange och välj sökvägar för symbolfiler.
- Ange symbolservrar för Microsoft-, Windows- eller tredjepartskomponenter.
- Ange moduler som du vill eller inte vill att felsökaren ska läsa in symboler automatiskt för.
- Ändra de här inställningarna medan du aktivt felsöker. Se Läs in symboler vid felsökning.
Specificera symbolplatser och inläsningsalternativ:
Not
De här alternativen uppdaterades i Visual Studio 2022 version 17.12 Förhandsversion 1.
I Visual Studio öppnar du Tools>Options>Debugging>Symbols (eller Debug>Options>Symbols).
Under symbolfilplatser (.pdb),
Om du vill använda Microsoft Symbol Servers eller NuGet.org Symbol Servermarkerar du kryssrutan.
Om du vill lägga till en ny symbolserverplats
- Välj symbolen + i verktygsfältet.
- Skriv URL:en (http), nätverksresursen eller den lokala sökvägen till symbolservern eller symbolplatsen i textfältet. Att slutföra påståenden hjälper dig att hitta rätt format.
Not
Endast den angivna mappen genomsöks. Du måste lägga till poster för alla undermappar som du vill söka i.
Så här lägger du till en ny Plats för Azure DevOps-symbolservern:
Välj ikonen i verktygsfältet.
I dialogrutan Anslut till Azure DevOps Symbol Server väljer du en av de tillgängliga symbolservrarna och väljer Anslut.
Mer information finns i Lägg till Azure Artifacts-symbolserver.
Om du vill ändra inläsningsordningen för symbolplatserna använder du Ctrl+Upp och Ctrl+Nedeller Upp och Ned pilikoner.
Om du vill redigera en URL eller sökväg dubbelklickar du på posten eller markerar den och trycker på F2.
Om du vill ta bort en post markerar du den och väljer sedan ikonen -.
(Valfritt) Om du vill förbättra symbolinläsningens prestanda skriver du under Cache-symboler i den här katalogenen sökväg för lokala mappar som symbolservrar kan kopiera symboler till.
Not
Placera inte den lokala symbolcachen i en skyddad mapp, till exempel C:\Windows eller en undermapp. Använd en skrivbar mapp i stället.
Notera
Om du har _NT_SYMBOL_PATH
miljövariabeluppsättning åsidosätter den värdet som anges under Cache-symboler i den här katalogen.
Ange de moduler som du vill att felsökaren ska läsa in från Symbol-filens (.pdb) platser när den startar.
Välj Välj automatiskt vilka modulsymboler som ska sökas efter (rekommenderas) så att Visual Studio kan bestämma vilka symboler som ska sökas efter och läsas in. Som standard läser Visual Studio automatiskt in symboler som har skapats av din öppnade lösning och läser in eventuella ytterligare symboler som behövs för att utföra vanliga felsökningsåtgärder. Detta minskar antalet filer som måste sökas efter och läsas in av Visual Studio, vilket förbättrar felsökningsprestandan. Du kan tvinga ytterligare symboler att läsas in genom att klicka på länken Ange modulfilter länk.
Välj Sök efter alla modulsymboler om du inte utesluter för att tvinga Visual Studio att läsa in alla symboler i din debugged-process. Detta rekommenderas inte eftersom det kan göra felsökningen långsammare. Om du väljer det här alternativet kan du tvinga Visual Studio att ignorera vissa symboler genom att klicka på länken Ange modulfilter länk.
Välj Läs in alla moduler, om du inte utesluter (standard) för att läsa in alla symboler för alla moduler på symbolfilens plats, förutom moduler som du specifikt exkluderar. Om du vill undanta vissa moduler väljer du Ange exkluderade moduler, väljer ikonen +, anger namnen på modulerna som ska undantas och väljer OK.
Om du bara vill läsa in moduler som du anger från symbolfilens platser väljer du Läs in endast angivna moduler. Välj Ange inkluderade moduler, välj ikonen +, skriv namnen på modulerna som ska inkluderas och välj sedan OK. Symbolfilerna för andra moduler läses inte in.
Välj OK.
Ange modulfilter
Både Välj automatiskt vilka modulsymboler som ska sökas efter och Sök efter alla modulsymboler om de inte utesluts alternativen gör att du kan få finare kontroll över vilka symboler som söks efter under felsökning. Välj Ange modulfilter för att finjustera upplevelsen.
Som standardinställning visas följande dialogruta när Välj automatiskt vilka modulsymboler som ska sökas efter är vald:
Du kan lägga till en modul i filtret med hjälp av ikonen +. Modulfilter stöder enkel wild card-matchning. Ett *-tecken matchar alla teckengrupper. Till exempel matchar "*myproduct*" filer sommyproduct.utilities.dllochentrypoint.myproduct.exe.
Det finns flera ytterligare alternativ för att ytterligare anpassa din upplevelse:
Läs alltid in symboler som finns bredvid moduler instruerar Visual Studio att läsa in pdb-filer som lagras i filsystemet bredvid motsvarande .dll eller .exe filer. Detta kan till exempel vara användbart när du försöker felsöka en distribuerad webbapp.
Läs in ytterligare symboler automatiskt när det behövs instruerar Visual Studio att söka efter symboler för att utföra vanliga felsökningsåtgärder, till exempel stegvis felsökning, även om modulen som du bygger inte finns i ditt projekt eller modulfiltret. Hur sökningen bestäms kan påverkas av inställningarna för Just My Code.
Om du har valt Sök efter alla modulsymboler om du inte utesluterser dialogrutan för modulfilter ut så här:
I den här dialogrutan kan du välja vilka moduler du inte vill att Visual Studio ska läsa in symboler för. I det här scenariot försöker Visual Studio läsa in symboler för varje modul i dina debugged proces (inklusive moduler från tredje part), såvida du inte lägger till ett matchande filter för att exkludera dem. Det enda andra sättet att ändra det här beteendet är av inställningarna Just My Code.
Andra symbolalternativ för felsökning
Du kan välja ytterligare symbolalternativ i Verktyg>Alternativ>Felsökning>Allmänt (eller Felsöka>Alternativ>Allmänt):
Läs in DLL-exporter (endast inbyggt)
Läser in DLL-exporttabeller för C/C++. Mer information finns i DLL-exporttabeller. Att läsa DLL-exportinformation innebär vissa kostnader, så inläsning av exporttabeller är inaktiverat som standard. Du kan också använda
dumpbin /exports
på en C/C++-kommandorad.Aktivera felsökning på adressnivå och Visa demontering om källan inte är tillgänglig
Visar alltid demonteringen när käll- eller symbolfiler inte hittas.
Aktivera stöd för källserver
Använder källservern för att felsöka en app när det inte finns någon källkod på den lokala datorn, eller om .pdb--filen inte matchar källkoden. Källservern tar begäranden om filer och returnerar de faktiska filerna från källkontrollen. Källservern körs med hjälp av en DLL med namnet srcsrv.dll för att läsa appens .pdb--fil. Filen .pdb innehåller pekare till källkodslagringsplatsen samt kommandon som används för att hämta källkod från lagringsplatsen.
Du kan begränsa de kommandon som srcsrv.dll kan köra från appens .pdb--fil genom att visa de tillåtna kommandona i en fil med namnet srcsrv.ini. Placera srcsrv.ini-filen i samma mapp som srcsrv.dll och devenv.exe.
Viktig
Godtyckliga kommandon kan bäddas in i en appens .pdb--fil, så se till att endast placera de kommandon som du vill köra i en -srcsrv.ini--fil. Alla försök att köra ett kommando som inte finns i filen srcsvr.ini gör att en bekräftelsedialogruta visas. För mer information, se Säkerhetsvarning: Felsökaren måste köra kommandot.
Ingen validering utförs på kommandoparametrar, så var försiktig med betrodda kommandon. Om du till exempel har listat cmd.exe i din srcsrv.inikan en obehörig användare ange parametrar på cmd.exe som skulle göra det farligt.
Markera det här objektet och de underobjekt du vill ha. Tillåt källserver för partiella förtroendesammansättningar (endast hanterade) och Kör alltid obetrodda källserverkommandon utan att fråga kan öka säkerhetsriskerna.
Alternativ för kompilatorsymbol
När du skapar ett projekt från Visual Studio IDE med standardkonfigurationen Debug build skapar C++ och hanterade kompilatorer lämpliga symbolfiler för koden. Du kan också ange kompilatoralternativ i kod.
Information om hur du anger kompileringsalternativ för dina byggkonfigurationer i Visual Studio finns i Ange felsöknings- och versionskonfigurationer.
.NET-alternativ
Skapa med /debug för att skapa en .pdb--fil. Du kan skapa program med /debug:full eller /debug:pdbonly. Bygga med /debug:full genererar debuggbara kod. Skapa med /debug:pdbonly genererar .pdb--filer, men genererar inte den DebuggableAttribute
som talar om för JIT-kompilatorn att felsökningsinformation är tillgänglig. Använd /debug:pdbonly om du vill generera .pdb- filer för en versionsversion som du inte vill ska vara felsökningsbar. Mer information finns i /debug (C#-kompilatoralternativ) eller /debug (Visual Basic).
C/C++-alternativ
VC<x>.pdb och <projekt>.pdb-filer
En .pdb- fil för C/C++ skapas när du skapar med /ZI eller /Zi. I Visual C++namnger alternativet /Fd den .pdb- fil som kompilatorn skapar. När du skapar ett projekt i Visual Studio med hjälp av IDE är alternativet /Fd inställt på att skapa en .pdb- fil med namnet <project>.pdb.
Om du skapar C/C++-programmet med hjälp av en makefile och anger /ZI eller /Zi utan att använda /Fd för att ange ett filnamn, skapar kompilatorn två .pdb- filer:
VC<x>.pdb, där <x> representerar versionen av Microsoft C++-kompilatorn, till exempel VC11.pdb
Filen VC<x>.pdb lagrar all felsökningsinformation för de enskilda objektfilerna och finns i samma katalog som projektfilen. Varje gång den skapar en objektfil sammanfogar C/C++-kompilatorn felsökningsinformation till VC<x>.pdb. Så även om varje källfil innehåller vanliga huvudfiler som <windows.h>lagras typedefs från dessa rubriker bara en gång i stället för i varje objektfil. Den infogade informationen innehåller typinformation, men innehåller inte symbolinformation, till exempel funktionsdefinitioner.
<projekt>.pdb
<-projektet>.pdb-filen lagrar all felsökningsinformation för projektets .exe-fil och finns i underkatalogen \debug. <-projektet>.pdb- fil innehåller fullständig felsökningsinformation, inklusive funktionsprototyper, inte bara typinformationen som finns i VC<x>.pdb.
Både VC<x>.pdb och <project>.pdb-filer tillåter inkrementella uppdateringar. Länkaren bäddar också in sökvägen till -.pdb--filer i den -.exe-- eller -.dll--fil som den skapar.
-
Använd
dumpbin /exports
för att se de symboler som är tillgängliga i exporttabellen för en DLL. Symbolisk information från DLL-exporttabeller kan vara användbar för att arbeta med Windows-meddelanden, Windows-procedurer (WindowProcs), COM-objekt, marskalkering eller eventuella DLL-filer som du inte har symboler för. Symboler är tillgängliga för valfri 32-bitars system-DLL. Anropen visas i anropsordningen med den aktuella funktionen (den mest kapslade) överst.Genom att läsa
dumpbin /exports
utdata kan du se de exakta funktionsnamnen, inklusive icke-alfanumeriska tecken. Att se exakta funktionsnamn är användbart för att ange en brytpunkt för en funktion, eftersom funktionsnamn kan trunkeras någon annanstans i felsökningsprogrammet. Mer information finns i dumpbin /exports.
Webbapplikationer
Ange web.config-filen för ditt ASP.NET-program till felsökningsläge. Felsökningsläget gör att ASP.NET genererar symboler för dynamiskt genererade filer och gör att felsökaren kan ansluta till ASP.NET-programmet. Visual Studio anger detta automatiskt när du börjar felsöka om du har skapat projektet från webbprojektmallen.
Ladda symboler under felsökning
Du kan använda Modules, Call Stack, Locals, Autoseller något Watch-fönster för att läsa in symboler eller ändra symbolalternativ vid felsökning. Mer information finns i Bekanta dig med hur felsökningsprogrammet ansluter till din app.
Arbeta med symboler i fönstret Moduler
Under felsökningen visar fönstret Moduler kodmodulerna som felsökaren behandlar som användarkod eller Min kod och deras symbolinläsningsstatus. Du kan också övervaka symbolinläsningsstatus, läsa in symboler och ändra symbolalternativ i fönstret Moduler.
Övervaka eller ändra symbolplatser eller alternativ vid felsökning:
- Om du vill öppna fönstret Moduler väljer du Felsöka>Windows>-moduler (eller trycker på Ctrl + Alt + U).
- I fönstret Moduler högerklickar du på rubrikerna Symbolstatus eller Symbolfil eller någon modul.
- I snabbmenyn väljer du något av följande alternativ:
Alternativ | Beskrivning |
---|---|
Läs in symboler | Visas för moduler med överhoppade, inte hittade eller inte inlästa symboler. Försöker läsa in symboler från platser som anges på sidan Alternativ>Felsökning>Symboler. Om symbolfilen inte hittas eller inte läses in startar Utforskaren så att du kan ange en ny sökplats. |
Information om inläsning av symboler | Visar platsen för en inläst symbolfil eller de platser som genomsöktes om felsökaren inte kan hitta filen. |
Symbolinställningar | Öppnar sidan Alternativ>Felsökning>Symboler, där du kan redigera och lägga till symbolplatser. |
Läs alltid in automatiskt | Lägger till den markerade symbolfilen i listan över filer som läses in automatiskt av felsökningsprogrammet. |
Använd sidorna Inga inlästa symboler/Ingen inläst källa
Det finns flera sätt för felsökaren att bryta sig in i kod som inte har symbol- eller källfiler tillgängliga:
- Börja med kod
- Dela upp koden från en brytpunkt eller ett undantag.
- Växla till en annan tråd.
- Ändra stackramen genom att dubbelklicka på en stackram i fönstret Samtalsstack.
När detta händer visar felsökaren sidorna Inga symboler läses in eller Ingen källkod läses in för att hjälpa dig att hitta och läsa in nödvändiga symboler eller källkod.
Om du vill använda dokumentsidan utan symboler för att hitta och läsa in saknade symboler:
- Om du vill ändra sökvägen väljer du en omarkerad sökväg eller väljer Ny sökväg eller Ny VSTS-sökväg och anger eller väljer en ny sökväg. Välj Läs in för att söka i sökvägarna igen och läs in symbolfilen om den hittas.
- För att åsidosätta symbolalternativen och prova sökvägarna igen, välj Bläddra och hitta <körbar fil>. Symbolfilen läses in om den hittas eller Utforskaren öppnas så att du kan välja symbolfilen manuellt.
- Om du vill öppna sidan symbolinställningar för att konfigurera beteende väljer du Ändra symbolinställningar (eller väljer Alternativ>Felsökning>symboler).
- (Avancerat) Om du vill visa demonteringen i ett nytt fönster en gång väljer du visa demonteringeller väljer dialogrutan Alternativ för att ange alternativet för att alltid visa demonteringen när käll- eller symbolfiler inte hittas. Mer information finns i Visa demonteringskod.
- Expandera Information om symbolinläsningför att visa sökplatserna och resultatet.
- För C#-kod kan du också välja att dekompilera källkoden från Inga symboler inlästa eller Ingen källa inläst sidor.
Om felsökaren hittar filen .pdb när du har kört något av alternativen och kan hämta källfilen med hjälp av informationen i filen .pdb visas källan. Annars visas en Ingen källa laddad sida, som beskriver problemet, med länkar till åtgärder som kan lösa problemet.
Så här lägger du till sökvägar för källfiler i en lösning:
Du kan ange de platser där felsökaren söker efter källfiler och exkludera specifika filer från sökningen.
Välj lösningen i Solution Exploreroch välj sedan ikonen Egenskaper, tryck Alt+Retureller högerklicka och välj Egenskaper.
Välj Felsöka källfiler.
Under Kataloger som innehåller källkodskriver eller väljer du de källkodsplatser som ska sökas efter. Använd ikonen Ny rad för att lägga till fler platser, ikonen Upp och nedåt pil för att ordna om dem eller ikonen X för att ta bort dem.
Not
Felsökningsprogrammet söker bara i den angivna katalogen. Du måste lägga till poster för alla underkataloger som du vill söka i.
Under Leta inte efter dessa källfilerskriver du namnen på källfilerna som ska undantas från sökningen.
Välj OK eller Använd.