Milleks on PDB fail?
PDB failid: Mida iga arendaja peab teadma
PDB stsenaariumi näide:
Mis on PDB fail?
Enamik arendajaid peaks teadma, et PDB-faile kasutatakse tarkvaralise silumise abistamiseks. Aga kuidas ta täpselt töötab, seda me ei pruugi teada. See artikkel kirjeldab PDB-failide salvestust ja sisu. See kirjeldab ka, kuidas silur leiab PDB-faili, mis vastab binaile, ja kuidas silur leiab lähtekoodifaili, mis vastab binay'le. See artikkel on mõeldud kõigile natiivsetele ja hallatud arendajatele.
Enne kui alustame, defineerime kaks mõistet: privaatne ehitus, mida kasutatakse arendaja enda masinal genereeritud ehituse tähistamiseks; avalik ehitus, mis tähendab ehitust, mis genereeritakse avaliku ehitusmasina peal. Privaatne ehitus on suhteliselt lihtne, sest PDB ja binay asuvad samas kohas ning tavaliselt on probleemid avaliku ehitusega seotud.
Kõige olulisem, mida kõik arendajad peavad teadma, on see, et "PDB-failid on sama olulised kui lähtekood", ilma milleta sa isegi siluda ei saa. Avaliku ehituse puhul peab sümboliserver salvestama kõik PDB-d ning kui kasutaja teatab veast, leiab silur automaatselt vastava PDB-faili binay's ning nii Visual Studio kui ka Windbg teavad, kuidas sümboliserverile ligi pääseda. Enne PDB ja binay salvestamist sümboliserverisse tuleb ka PDB käivitamise lähteindeks, mis seob PDB ja allika.
Järgmine osa eeldab, et sümboliserver ja lähteserveri indekseerimine on juba seadistatud. TFS2010 saab teha nii lihtsalt kui allika indekseerimine ja sümboliserveri kopeerimine uue ehituse jaoks.
2. PDB faili sisu
PDB sisu ametlikult alustades ei ole PDB avalikult kättesaadav failivorming, kuid Microsoft pakub API-d, mis aitab PDB-lt andmeid saada.
Natiivse C++ PDB sisaldab järgmist teavet: * avalikud, privaatsed ja staatilised funktsiooniaadressid; * Globaalmuutuja nimi ja aadress; * Parameetrite ja lokaalsete muutujate nimed ning nihked virnas; * klassi, struktuuri ja andmete tüübimääratlused; * Frame Pointer Unmission andmed natiivse virna läbimiseks x86 peal; * Nimi ja ridade arv lähtekoodifailis;
.NET PDB sisaldab ainult kahte infoosa: * Lähtekoodifaili nimi ja ridade arv; * ja lokaalmuutuja nimi; * Kõik muud andmed on juba lisatud . NET metaandmed;
|