Mihin PDB-tiedosto on tarkoitettu?
PDB-tiedostot: Mitä jokaisen kehittäjän tulee tietää
Esimerkki PDB-skenaariosta:
Mikä on PDB-tiedosto?
Useimpien kehittäjien tulisi tietää, että PDB-tiedostoja käytetään ohjelmistovirheen korjaamiseen. Mutta miten hän tarkalleen ottaen toimii, sitä emme ehkä tunne. Tässä artikkelissa kuvataan PDB-tiedostojen tallennustilaa ja sisältöä. Se kuvaa myös, miten debuggeri löytää binay-tiedoston PDB-tiedoston ja miten debuggeri löytää binayn lähdekooditiedoston. Tämä artikkeli on tarkoitettu kaikille Native ja Managed -kehittäjille.
Ennen kuin aloitamme, määritellään kaksi termiä: yksityinen rakennus, jota käytetään tarkoittamaan kehittäjän omalla koneella tuotettua buildia; julkinen rakennus, joka tarkoittaa julkisella koneella luotua buildia. Yksityinen rakentaminen on suhteellisen yksinkertaista, koska PDB ja binay ovat samassa tilanteessa, ja yleensä ongelmat liittyvät julkiseen rakentamiseen.
Tärkein asia, joka kaikkien kehittäjien täytyy tietää, on että "PDB-tiedostot ovat yhtä tärkeitä kuin lähdekoodi", ilman sitä et voi edes debugata. Julkisessa rakentamisessa symbolipalvelimen täytyy tallentaa kaikki PDB:t, ja kun käyttäjä raportoi virheen, virheenkorjaaja löytää automaattisesti vastaavan PDB-tiedoston binaysta, ja sekä Visual Studio että Windbg tietävät, miten käyttää symbolipalvelinta. Ennen kuin PDB ja binay tallennetaan symbolipalvelimelle, sinun täytyy myös indeksoida PDB-suoritus, eli yhdistää PDB ja lähdekoodi.
Seuraava osa olettaa, että Symbol Server ja Source Server Indexing on jo asetettu. TFS2010 voidaan tehdä yhtä yksinkertaisesti kuin lähdeindeksointi ja symbolipalvelimen kopiointi uudelle versiolle.
2. PDB-tiedoston sisältö
Virallisesti PDB:n sisällön aloittaminen ei ole julkisesti saatavilla oleva tiedostomuoto, mutta Microsoft tarjoaa API:n, joka auttaa saamaan dataa PDB:stä.
Natiivi C++ PDB sisältää seuraavat tiedot: * julkiset, yksityiset ja staattiset funktioosoitteet; * Globaalin muuttujan nimi ja osoite; * Parametrien ja paikallisten muuttujien nimet sekä siirtymät pinossa; * luokka-, rakenteen ja datan tyypin määrittelyt; * Frame Pointer Omission data native stackin läpikäyntiä varten x86:lla; * Nimi ja rivien määrä lähdekooditiedostossa;
.NET PDB sisältää vain kaksi osaa tietoa: * Lähdekooditiedoston nimi ja rivien määrä; * ja paikallisen muuttujan nimi; * Kaikki muu data sisältyy jo . NET-metatiedot;
|