aplicatii Debugging

În această secțiune vom trece de la teorie la practică și se uite la unele aspecte ale aplicațiilor de depanare.

Versiunile finale și Debugging

  • Toate variabilele locale neinițializate valoarea 0xCC umplut. Manipularea pointer neinițializate cu o valoare garantată pentru a conduce la încălcarea de acces. Programul va fi suspendat, și puteți vedea în debugger, locația exactă a liniei problemei.
  • Valorile indicatorului stivă la intrarea și ieșirea din funcțiile sunt verificate pentru egalitate. Nepotrivirea înseamnă că stiva este deteriorat (de exemplu, ca urmare a înregistrării frontierei de matrice locale), iar programul va afișa un mesaj de eroare.
  • Valorile indicatorului stivă înainte și după apel sunt, de asemenea, verificate pentru egalitate. În cazul în care detectat nepotrivire, programul dă un mesaj de eroare. Acest lucru face posibilă detectarea erorilor asociate cu funcția de apel la semn, care este setat incorect setat, sau de asteptare convenție. Aici este un exemplu de această eroare:

Unii cred că, după dezactivarea optimizare simboluri de depanare și generarea versiunii finale nu este diferită de depanare. Acest lucru nu este așa. În primul rând, versiunea de depanare a legăturii din versiunea de depanare a bibliotecii C, iar versiunea finală - cu de obicei. În al doilea rând, versiunea finală nu este determinată de _DEBUG macro. ceea ce duce la eliminarea tuturor controalelor de diagnosticare a programului. Există și alte diferențe, mai subtile. De exemplu, în versiunea finală nu există nici o inițializare a variabilelor și a zonelor de memorie de valori speciale de depanare, astfel 0xCD, 0xCC. Acest ajutor are ca rezultat compilatorului că multe controale indicative variabile, dând un rezultat stabil în versiunea de depanare, provocând instabilitate în versiunea finală.

Dacă eroarea apare numai atunci când optimizare activată, aceasta poate fi corectată prin una dintre următoarele metode.

  • Abandonați optimizarea, sau activa selectiv pentru modulele individuale. Puteți utiliza, de asemenea #pragma optimiza directiva pentru a ajusta optimizarea în cadrul modulului.
  • Rescrie codul într-un mod diferit - probabil într-o versiune modificată, va fi compilate și optimizate fără erori.

aplicațiile care rulează alte aplicații Debugging

Dacă aplicația pe care doriți să depanare, executați dintr-o altă aplicație (în special, acest lucru se aplică serviciilor COM-server locale și Windows NT), problema este ceva mai complicată. Trebuie să atașați un depanator la un proces țintă înainte de a fi executat în codul defect. Puteți utiliza următoarele abordări.

conectați manual debugger la un proces

Știți deja că pentru a atașa un depanator la un proces deja rulează în două moduri: de la Task Manager sau prin comanda build-> Start Debug-> Atașați la proces.

Dezavantajul acestei abordări constă în faptul că de la începutul procesului înainte de a se alătura debugger ia ceva timp în care programul are timp pentru a executa. Acest lucru poate fi doar partea care sunteți cel mai interesat. În acest caz, ar trebui să utilizați următoarea metodă.

Utilizarea DebugBreak

DebugBreak funcție poate fi folosită pentru a întrerupe programul de la începutul activității sale, cum ar fi:

Apelați funcția DebugBreak echivalentă cu declanșarea unui punct de întrerupere. În cazul în care programul se execută fără întrerupere depanator nu este diferită de orice altă excepție. Prin urmare, sistemul se va opri programul și să dea familiar fereastra Error Application (Fig. 10).


Figura 10. Breakpoint Tip Excepție

conectați automat debugger la un proces

Cu parametrul Debugger un asociat constrângere neplacuta: o lungime de cale depanator nu trebuie să depășească 64 de caractere. Calea către directorul în care Visual C ++ instalat în mod implicit, acesta este de obicei mai mult. În acest caz, aveți nevoie pentru a găsi o modalitate de a scrie calea către o formă mai compactă - de exemplu, pentru a face directorul cu Visual C ++ partajat (partajat) și setați parametrul Depanatorul numele de rețea.

Aplicația va rula întotdeauna sub debugger. Pentru a dezactiva acest comportament, eliminați cheia de registry care este asociat cu aplicația dvs.

Ce se face în continuare

Odată atașat la procedura de aplicare debugger poate fi despre.

Fișierele cu simboluri de depanare trebuie să fie în același director cu programul, sau în directorul în care au pus inițial compilator.

  • Deschideți fișierele sursă ale programului (File-> Open) și puneți-l în locul potrivit, punctele de inflexiune.
  • Renew aplicația.

După aceea a sesiune de depanare va proceda ca de obicei.

servicii de Debugging

Servicii de DVse Windows NT se execută serviciul de control Manager (Manager servicii de control, SCM). Atașați depanatorul poate procesa serviciul la momentul de început și mai târziu. Puteți utiliza metodele prezentate în secțiunea anterioară. Cu toate acestea, serviciile sunt câteva caracteristici care merită menționat.

O versiune simplificată a depanare

Deoarece fiecare serviciu este o aplicație obișnuită pentru Windows, în cele mai multe cazuri, acesta poate fi rulat ca orice alt fișier executabil, și depanare în modul normal. Pentru serviciile create cu ATL Wizard, cod care vă permite să înregistrați acest serviciu, nu numai ca un serviciu, ci ca un local de COM-server obișnuit generat. În aceste metode standard sunt disponibile aplicații EXE-depanare. Acest regim nu este întotdeauna adecvat ca o aplicație care rulează ca un serviciu, are propriile sale caracteristici.

executarea de cod Debugging

Permite Service Mode pentru a interacționa cu desktop

În procesul de depanare a serviciului (sau orice altă aplicație) este convenabil de a utiliza macro-uri de depanare (cum ar fi _ASSERT) să examineze diferitele condiții în cursul programului. Că mesajele de la aceste macro-uri pot apărea pe ecran, deschideți proprietățile serviciului, accesați fila Log On, asigurați-vă că serviciul rulează sub contul SYSTEM, și bifați caseta Se permite service pentru a interacționa cu desktop. Atunci când serviciul este pe deplin depanat, această opțiune poate fi dezactivată.

Debugging locale COM-server

Atunci când depanare un COM-server local convenabil de a utiliza modul de depanare OLE RPC. În acest mod, puteți „merge“ în debugger direct în metodele COM-server (pentru acest „on the fly“ este condusă oa doua instanță a debugger și conectați la server). OLE modul RPC depanare este activat în fereastra Instrumente-> Opțiuni (fila Debug). Pentru a face disponibil, trebuie să activați mai întâi modul de depanare Just-in-time.

articole similare