Hva er en PDB-fil til?
PDB-filer: Det enhver utvikler må vite
Eksempel på PDB-scenario:
Hva er en PDB-fil?
De fleste utviklere bør vite at PDB-filer brukes til å hjelpe med feilsøking av programvare. Men hvordan han egentlig fungerer, er vi kanskje ikke kjent med. Denne artikkelen beskriver lagring og innhold i PDB-filer. Den beskriver også hvordan debuggeren finner PDB-filen som tilsvarer binay, og hvordan debuggeren finner kildekodefilen som tilsvarer binay. Denne artikkelen er for alle Native- og Managed-utviklere.
Før vi begynner, la oss definere to begreper: privat build, som brukes for å betegne en build generert på utviklerens egen maskin; offentlig build, som betyr en build generert på en offentlig build-maskin. privat bygging er relativt enkelt, fordi PDB og Binay er på samme sted, og vanligvis handler problemene vi har om offentlig bygging.
Det viktigste alle utviklere må vite, er at «PDB-filer er like viktige som kildekode», uten hvilken du ikke engang kan feilsøke. For offentlig build må symbolserveren lagre alle PDB-ene, og når brukeren rapporterer en feil, kan debuggeren automatisk finne den tilsvarende PDB-filen i binay, og både Visual Studio og Windbg vet hvordan de får tilgang til symbolserveren. Før du lagrer PDB og binay til symbolserveren, må du også kildeindeksere PDB-kjøringen, altså assosiere PDB og kilde.
Neste del forutsetter at Symbolserver- og Source Server-indekseringen allerede er satt opp. TFS2010 kan gjøres like enkelt som kildeindeksering og symbolserverkopiering for en ny build.
2. Innholdet i PDB-filen
PDB startet offisielt innholdet i PDB, og er ikke et offentlig tilgjengelig filformat, men Microsoft tilbyr et API for å hjelpe med å hente data fra PDB.
Den native C++ PDB-en inneholder følgende informasjon: * offentlige, private og statiske funksjonsadresser; * Navnet og adressen til den globale variabelen; * Parameter- og lokale variabelnavn og forskyvninger på stakken; * typedefinisjoner av klasse, struktur og data; * Frame Pointer-utelatelsesdata for å traversere den native stakken på x86; * Navnet og antall linjer i kildekodefilen;
.NET PDB-en inneholder kun to deler av informasjonen: * Kildekodefilnavn og antall linjer; * og navnet på den lokale variabelen; * Alle andre data er allerede inkludert i . NET-metadata;
|