Debugging simboluri, un blog pe ferestre

Deci, până în acel moment, fără fișiere suplimentare pentru a facilita procesul de depanare, nu sunt furnizate cercetătorilor de cod.

  • Acesta este reprezentat de un bloc de date, construit în fișierul executabil binar, care este localizat în interiorul executabil. Nu este cel mai bun mod de a stoca aceste simboluri, deoarece, uneori, poate crește în mod semnificativ dimensiunea fișierului executabil.
  • Acesta este plasat într-un fișier extern separat stocate într-un director sau un fișier binar sau într-un director independent special. O astfel de metodă de introducere a caracterelor cele mai versatile.
  • absente cu totul. Acest lucru nu este generat la momentul compilării, și / sau de asamblare. iar acest lucru se întâmplă în cele mai multe cazuri :)

Pentru o versiune specială a codului executabil, compilatorul creează un fișier simbol unic.

Este sub o destul de simplu bazelor, deoarece simbolurile de depanare sunt rigid legat de un cod sursă specifică, iar în cazul în care codul sursă pentru a schimba ceva (un șir de caractere, o variabilă procedură), vechea linie încetează să mai fie relevantă și necesară pentru a genera un nou fișier simbol, care Aceasta corespunde exact pentru a avea un cod nou, modificat sursa. Din punctul de vedere al unui dezvoltator merită luat în considerare faptul că orice schimbare în potențialul proiectului este de incompatibilitate completă între fișiere și componente de caractere, astfel încât fișierele de simboluri și fișierele binare ar trebui să fie construite în același timp. Din perspectiva cercetătorului, trebuie amintit că fișierele aceste simboluri sunt schimbate de fiecare dată când un nou build (build), astfel încât procesul de actualizare a sistemului necesită, de asemenea, o actualizare de depanare fișiere de simboluri legate de modulele de sistem. Acesta este motivul pentru care destul de convenabil de a utiliza o solicitare de caracter proces automat, astfel încât să nu fie distras de sincronizare manuală.

Nu avem nevoie de simboluri

WinDbg depanator de la Microsoft poate fi configurat pentru a solicita în mod automat informațiile de depanare, dacă este necesar. Asta e doar întrebarea de bază pe care aș dori eu să le răspundă dacă sunt necesare aceste simboluri aceleași depanare sau nu? Am efectuat un experiment simplu, care a constat în faptul că am găsit culcat în jurul meu stație de testare haldei picătură ecran albastru de deces (BSOD) și conectați-l mai întâi în WinDbg cu caracterele disponibile, iar apoi, în același windbg fără caractere, și aici este rezultatul:

În procesul de depanare aplicații pe 32 de biți sunt situații în care, fără utilizarea de caractere, nu se poate obține o urmă stivă de încredere.

Debugging simboluri, un blog pe ferestre

răspândire

Este clar că, în cazul în care simbolurile sunt acordate în mod oficial, acestea trebuie să distribuie într-un fel, pentru ceea ce ar fi utilizatorii finali ai software-ului au posibilitatea, în acută pe cursul dorit, acesta este produs de depanare, și anume în cazul unor erori au capacitatea de a găsi rapid cauza probabilă a apariției. Cum, atunci, simboluri de depanare oferă publicului țintă? Cu ceva timp în urmă dezvoltatorii care au avut sarcina de depanare simbolurilor clienților săi, a trecut aceste informații pentru produsele lor pe unități optice, CD-uri / DVD. Nu este o excepție, și sistemul de operare Windows, care poate fi livrat cu simboluri de depanare, introduse în mod tradițional pe disc accesoriu de distribuție, sau ca parte a Kit Driver Development (DDK). Cu toate acestea, o anumită perioadă de timp a devenit o metoda populara de simboluri răspândite pe internet. În rețea pentru acest scop, Microsoft plasează propriul server simbol, care prevede simboluri de depanare, cu toate acestea, pentru a lucra cu serverul de simbol, trebuie să utilizați un protocol personalizat.

server de simbol Microsoft

Multe componente dezvoltate de Microsoft, cum ar fi fișierele care alcătuiesc sistemul de operare, aplicații de birou și alte produse care sunt compilate împreună cu simbolurile, care sunt apoi distribuite prin intermediul serverului simbol Microsoft (Microsoft Symbol Server). Simbolul server este un depozit online de simboluri publice pentru produse Microsoft este disponibil pentru solicitarea prin protocolul HTTP pentru o cale vizual non-afișare (URL):

Acesta este disponibil pe magazia de internet a tuturor simbolurilor publice pentru produsele lansate de Microsoft în ultimii ani. Un avantaj imens de depanare de caractere on-line este toate Debuggere Microsoft (independente ca WinDbg. KD și incluse într-un produs cum ar fi MS Visual Studio Debugger), precum și o serie de instrumente de depanare la terțe părți sunt acum posibilitatea de a încărca în mod automat simboluri direct de pe serverul în funcție de versiunea de cod binar fiind depanat. Imaginați-vă cât de mult timp pot fi salvate în comparație cu o situație în care trebuie să cârlig manual caracterele este versiunea a modulului pe care îl depanare în acest moment.

Este demn de remarcat faptul că pe serverul de simboluri Microsoft furnizează doar simboluri publice, și anume „dezbrăcat-jos“ informații cu privire la structura binară. Excepțiile sunt unele tipuri de fișiere în module și kernel Ntdll.dll.

Simboluri publice și private

După cum ați înțeles deja, informațiile din dosarele de caractere poate varia în funcție de gradul de completitudine. În mod implicit, simbolul fisierelor generate de C / C ++ linker-ul conține o mulțime de informații despre fișierul executabil este de obicei mai mult decât majoritatea dezvoltatorilor de software sunt dispuși să ofere clienților săi. În acest sens, după crearea de informații private este eliminat din simbolurile PPB-fișiere pentru a obține la ieșire a ceea ce se numește simboluri publice (simboluri publice) sau simboluri trunchiate (simboluri decapate). Aceste „tăiat“ simboluri publice nu pot fi folosite pentru depanare în modul de a codului sursă, deoarece codul sursă în ele este pur și simplu nu, și nici o informație cu privire la numărul de linii din fișierul sursă. caractere vizitator pur și simplu nu includ informații pentru a ajuta cu setările de afișare de cele mai multe funcții, informații cu privire la variabile locale, tipuri de variabile locale. Cu toate acestea, ele conțin suficiente informații pentru a script-uri de depanare cheie, care de multe ori este suficient. Astfel, este posibil să se facă o concluzie reconfortant:

Simbolurile publice conțin un minimum de informații, care, cu toate acestea, este suficient pentru scenarii de depanare cele mai fiabile.

Fișierele de simboluri distribuite de Microsoft, includ numai funcții publice, variabilele globale și tipurile lor de date, adică, sunt publice. În schimb, unii dezvoltatori de software (Mozilla) distribuie informațiile complete de depanare (simboluri publice și private simboluri). Simboluri private (pline, închise) (simboluri private) conțin mult mai multe informații, inclusiv calea și numărul de linii ale codului sursă, numele și tipurile de parametri de funcții și variabile.

formatul PPB

Deoarece fiind simbolurile de depanare au devenit masiv în comunitate cererea de experți, mulți dezvoltatori de software sunt preocupați de crearea unei varietăți de metode de stocare pe fișierele sursă din unitățile de simboluri. În acest sens, în natura tuturor tipurilor de caractere au apărut formate de înregistrare. Noi, în contextul acestui articol, formate de stocare simbol pentru produsele Microsoft.
În general, simbolurile pot fi furnizate în următoarele formate:

  • fișiere .COFF. care conține date în format Common Object File Format (Coff);
  • fișiere .CV. care conține date în format CodeView. de caractere format de stocare de la Microsoft. depășite;
  • fișiere .sym (simboluri). Formatul Caducă;
  • fișiere .DBG (Debug), care conține date în format COFF (Common Object File Format). Destul de un format comun, care este compatibil cu un număr mare de debugger mai vechi. Cu toate acestea, ea nu poate conține informații privind liniile de cod sursă;
  • Fișierele .pdb (baza de date din Program), care conține date în format MSF (Multi-Stream fișiere). Formatul avansat modern dezvoltat de Microsoft. Acesta poate conține mult mai multe informații decât .dbg.

Cu toate acestea, vom lua în considerare în acest articol numai formatul PPB, care este cel mai avansat, respectiv, și formatul preferat pentru o varietate de instrumente de dezvoltare de la Microsoft.
Toate datele pe care fișierul PPB pot conține:

  • caractere ale vizitatorilor: toate funcțiile, variabilele statice și globale;
  • Lista de fișiere obiect pe care sunt responsabile pentru o secțiune de cod în fișier executabil;
  • Informații privind optimizarea indicatorul frame stivă (FPO);
  • Numele variabilelor locale;
  • Tipul de variabile locale. Cu acest depanator sau dezasamblor nu pot fi citite numai de variabilele de memorie, dar, de asemenea, pentru a afișa aceste valori pe ecran într-o anumită formă (în funcție de tipul de variabilă);
  • Numele structurilor de date;
  • Tipul de structuri de date;
  • Simboluri private: codul sursă al programului;
  • Simboluri private: informație număr în textul sursă;

PPB este fișierul:

Pe exemplu este posibil să se spună WinDbg debugger că el „poate“ descărca în mod automat fișierele de depanare simboluri în formatul PDB de la server prin selectarea diferitelor criterii (timp de control ștampila (CRC), un singur / multi-core), folosind SymSrv (SymSrv.dll). protocol standard de căutare a simbolurilor funcționează cu serverul Microsoft simbol.

Nu știu dacă pot dezvolta o temă, dar unele concluzii în procesul studierii subiectului, eu încă mai făcut pentru mine. Concluzia principală care poate fi trasă după citirea materialului - simboluri de depanare simplifica foarte mult procesul de depanare software-ul și de a reduce timpul petrecut pe înțelegerea algoritmului de lucru și căutând sursa problemei.

Legate de intrări: