utilizați puncte de întrerupere în depanatorul Visual Studio

  • 06/30/2020
  • 12 minute de citit
    • M
    • g
    • j
    • v
    • g
    • +8

punctele de întrerupere sunt una dintre cele mai importante tehnici de depanare din caseta de instrumente a dezvoltatorului. Setați puncte de întrerupere oriunde doriți să întrerupeți executarea depanatorului. De exemplu, poate doriți să vedeți starea variabilelor de cod sau să priviți stiva de apeluri la un anumit punct de întrerupere. Dacă încercați să rezolvați un avertisment sau o problemă în timp ce utilizați puncte de întrerupere, consultați Depanarea punctelor de întrerupere din depanatorul Visual Studio.

notă

dacă știți sarcina sau problema pe care încercați să o rezolvați, dar trebuie să știți ce fel de punct de întrerupere să utilizați, consultați Întrebări frecvente – Găsiți caracteristica de depanare.

setați punctele de întrerupere în codul sursă

puteți seta un punct de întrerupere pe orice linie de cod executabil. De exemplu, în următorul cod C#, puteți seta un punct de întrerupere pe linia de cod cu atribuirea variabilei (int testInt = 1), bucla for sau orice cod din bucla for. Nu puteți seta un punct de întrerupere pentru semnăturile metodei, declarațiile pentru un spațiu de nume sau o clasă sau declarațiile variabile dacă nu există nicio atribuire și Niciun getter/setter.

pentru a seta un punct de întrerupere în codul sursă, faceți clic pe marginea din stânga de lângă o linie de cod. De asemenea, puteți selecta linia și apăsați F9, selectați Debug > Toggle Breakpoint sau faceți clic dreapta și selectați Breakpoint > Insert breakpoint. Punctul de întrerupere apare ca un punct roșu în marginea din stânga.

pentru cele mai multe limbi, inclusiv c#, breakpoint și liniile de execuție curente sunt evidențiate automat. Pentru codul c++, puteți activa evidențierea punctelor de întrerupere și a liniilor curente selectând Instrumente (sau depanare) > Opțiuni > depanare > evidențiați întreaga linie sursă pentru punctele de întrerupere și instrucțiunea curentă (numai C++).

Setați un punct de întrerupere

când depanați, execuția se întrerupe la punctul de întrerupere, înainte ca codul de pe acea linie să fie executat. Simbolul punctului de întrerupere arată o săgeată galbenă.

la punctul de întrerupere din exemplul următor, valoarea testInt este încă 1. Deci, valoarea nu sa schimbat de când variabila a fost inițializată (setată la o valoare de 1), deoarece instrucțiunea în galben nu a fost încă executată.

execuție Breakpoint oprit

când depanatorul se oprește la breakpoint, poti sa te uiti la starea curentă a aplicației, inclusiv valorile variabile și stiva de apel.

iată câteva instrucțiuni generale pentru lucrul cu punctele de întrerupere.

  • punctul de întrerupere este o comutare. Puteți să faceți clic pe el, să apăsați F9 sau să utilizați Debug > Toggle Breakpoint pentru a-l șterge sau reintroduce.

  • pentru a dezactiva un punct de întrerupere fără a-l șterge, treceți cu mouse-ul peste sau faceți clic dreapta pe el și selectați Dezactivare punct de întrerupere. Punctele de întrerupere dezactivate apar ca puncte goale în marginea din stânga sau în fereastra puncte de întrerupere. Pentru a reactiva un punct de întrerupere, treceți cu mouse-ul peste sau faceți clic dreapta pe el și selectați Activare punct de întrerupere.

  • setați condiții și acțiuni, adăugați și editați etichete sau exportați un punct de întrerupere făcând clic dreapta pe el și selectând comanda corespunzătoare sau trecând peste el și selectând pictograma Setări.

acțiuni Breakpoint și tracepoints

un tracepoint este un punct de întrerupere care imprimă un mesaj în fereastra de ieșire. Un tracepoint poate acționa ca o declarație de urmărire temporară în limbajul de programare și nu întrerupe executarea codului. Creați un tracepoint setând o acțiune specială în fereastra de setări a punctului de întrerupere. Pentru instrucțiuni detaliate, consultați Utilizarea tracepoints în depanatorul Visual Studio.

condiții Breakpoint

puteți controla când și unde se execută un breakpoint prin setarea condițiilor. Condiția poate fi orice expresie validă pe care depanatorul o recunoaște. Pentru mai multe informații despre expresii valide, consultați expresii în depanator.

pentru a seta o condiție a punctului de întrerupere:

  1. faceți clic dreapta pe simbolul punctului de întrerupere și selectați condiții (sau apăsați Alt + F9, c). Sau treceți cu mouse-ul peste simbolul punctului de întrerupere, selectați pictograma Setări, apoi selectați condiții în fereastra Setări punct de întrerupere.

    de asemenea, puteți seta condiții în fereastra puncte de întrerupere făcând clic dreapta pe un punct de întrerupere și selectând Setări, apoi selectând condiții.

    Setări punct de întrerupere

  2. în meniul derulant, selectați Expresie condiționată, număr de accesări sau filtru și setați valoarea în consecință.

  3. selectați Închidere sau apăsați Ctrl+Enter pentru a închide fereastra de setări a punctului de întrerupere. Sau, din fereastra puncte de întrerupere, selectați OK pentru a închide dialogul.

punctele de întrerupere cu condiții setate apar cu un simbol + în ferestrele cod sursă și puncte de întrerupere.

crearea unei expresii condiționale

când selectați expresie condițională, puteți alege între două condiții: este adevărat sau când este modificat. Alegeți este adevărat pentru a rupe atunci când expresia este satisfăcută sau când este modificată pentru a rupe atunci când valoarea expresiei s-a schimbat.

în exemplul următor, punctul de întrerupere este atins numai atunci când valoarea testInt este 4:

 starea punctului de întrerupere este adevărată

în exemplul următor, punctul de întrerupere este atins numai atunci când valoarea testInt se modifică:

Breakpoint când este modificat

Dacă setați o condiție breakpoint cu sintaxă nevalidă, apare un mesaj de avertizare. Dacă specificați o condiție a punctului de întrerupere cu sintaxă validă, dar semantică nevalidă, apare un mesaj de avertizare la prima atingere a punctului de întrerupere. În ambele cazuri, depanatorul se rupe atunci când atinge punctul de întrerupere nevalid. Punctul de întrerupere este omis numai dacă condiția este validă și se evaluează la false.

notă

pentru câmpul când s-a schimbat, depanatorul nu consideră că prima evaluare a condiției este o modificare, deci nu atinge punctul de întrerupere la prima evaluare.

utilizați ID-urile obiectelor în expresii condiționale (numai C# și F#)

există momente în care doriți să observați comportamentul unui anumit obiect. De exemplu, poate doriți să aflați de ce un obiect a fost introdus într-o colecție de mai multe ori. În C # și F#, puteți crea ID-uri de obiecte pentru anumite instanțe de tipuri de referință și le puteți utiliza în condiții de punct de întrerupere. ID-ul obiectului este generat de serviciile de depanare common language runtime (CLR) și asociat cu obiectul.

pentru a crea un ID obiect:

  1. Setați un punct de întrerupere în cod un loc după ce obiectul a fost creat.

  2. începeți depanarea și când execuția se întrerupe la punctul de întrerupere, selectați Debug > Windows > Locals (sau apăsați Ctrl + Alt + V, L) pentru a deschide fereastra Locals.

    găsiți instanța de obiect specifică în fereastra Locals, faceți clic dreapta pe ea și selectați Make Object ID.

    ar trebui să vedeți un $ plus un număr în fereastra localnicilor. Acesta este ID-ul obiectului.

  3. adăugați un nou punct de întrerupere în punctul pe care doriți să îl investigați; de exemplu, când obiectul urmează să fie adăugat la colecție. Faceți clic dreapta pe punctul de întrerupere și selectați condiții.

  4. utilizați ID-ul obiectului în câmpul Expresie condiționată. De exemplu, dacă variabila item este obiectul care trebuie adăugat la colecție, selectați este adevărat și tastați element == $<n>, unde <n> este numărul de identificare al obiectului.

    execuția se va întrerupe în momentul în care obiectul respectiv va fi adăugat la colecție.

    pentru a șterge ID-ul obiectului, faceți clic dreapta pe variabila din fereastra Locals și selectați ștergere ID obiect.

notă

ID-urile obiectelor creează referințe slabe și nu împiedică colectarea gunoiului obiectului. Acestea sunt valabile numai pentru sesiunea curentă de depanare.

setați o condiție de numărare a loviturilor

dacă bănuiți că o buclă din codul dvs. începe să se comporte greșit după un anumit număr de iterații, puteți seta un punct de întrerupere pentru a opri execuția după acel număr de accesări, în loc să apăsați în mod repetat F5 pentru a ajunge la acea iterație.

în condiții din fereastra Setări punct de întrerupere, selectați număr de accesări, apoi specificați numărul de iterații. În exemplul următor, punctul de întrerupere este setat pentru a lovi pe fiecare altă iterație:

Breakpoint hit count

setarea unei condiții de filtrare

puteți restricționa un breakpoint la foc numai pe dispozitivele specificate sau în procesele și firele specificate.

în condiții din fereastra Setări punct de întrerupere, selectați filtru, apoi introduceți una sau mai multe dintre următoarele expresii:

  • MachineName = “nume”
  • ProcessId = valoare
  • ProcessName =”nume”
  • ThreadId = valoare
  • ThreadName = “nume”

includeți valorile șirurilor în ghilimele duble. Puteți combina clauze folosind & (și), || (sau), ! (nu) și paranteze.

setați punctele de întrerupere a funcției

puteți întrerupe execuția atunci când este apelată o funcție. Acest lucru este util, de exemplu, atunci când cunoașteți numele funcției, dar nu locația acesteia. De asemenea, este util dacă aveți funcții cu același nume și doriți să le rupeți pe toate (cum ar fi funcții supraîncărcate sau funcții în diferite proiecte).

pentru a seta un punct de întrerupere a funcției:

  1. selectați Debug > New Breakpoint > funcția Breakpoint sau apăsați Ctrl + K, B.

    de asemenea, puteți selecta funcția New > Breakpoint în fereastra Breakpoints.

  2. în dialogul new Function Breakpoint, introduceți numele funcției în caseta Function Name (Nume funcție).

    pentru a restrânge specificațiile funcției:

    • utilizați numele funcției complet calificat.

      exemplu: Namespace1.ClassX.MethodA()

    • adăugați tipurile de parametri ale unei funcții supraîncărcate.

      exemplu: MethodA(int, string)

    • folosește ‘!’simbol pentru a specifica modulul.

      exemplu: App1.dll!MethodA

    • utilizați operatorul de context în C++nativ.

      {function, , }

      exemplu: {MethodA, , App1.dll}+2

  3. în meniul derulant limbă, Alegeți limba funcției.

  4. selectați OK.

setarea unui punct de întrerupere a funcției utilizând o adresă de memorie(numai C ++ nativ)

puteți utiliza adresa unui obiect pentru a seta un punct de întrerupere a funcției pe o metodă apelată de o instanță specifică a unei clase. De exemplu, având în vedere un obiect adresabil de tip my_class, puteți seta un punct de întrerupere a funcției pe metoda my_method pe care o apelează instanța.

  1. Setați un punct de întrerupere undeva după instanțierea instanței clasei.

  2. găsiți adresa instanței (de exemplu, 0xcccccccc).

  3. selectați Debug > New Breakpoint > funcția Breakpoint sau apăsați Ctrl + K, B.

  4. adăugați următoarele în caseta Nume funcție și selectați C++ language.

    ((my_class *) 0xcccccccc)->my_method

Setați puncte de întrerupere a datelor (. Net Core 3.0 sau mai mare)

punctele de întrerupere a datelor rup execuția atunci când proprietatea unui anumit obiect se schimbă.

pentru a seta un punct de întrerupere a datelor

  1. într-un proiect.net Core, începe depanare, și așteptați până când se ajunge la un punct de întrerupere.

  2. în fereastra Autos, Watch sau Locals, faceți clic dreapta pe o proprietate și selectați Break atunci când valoarea se modifică în meniul contextual.

    punct de întrerupere a datelor gestionate

punctele de întrerupere a datelor din. net Core nu vor funcționa pentru:

  • proprietăți care nu pot fi extinse în fereastra tooltip, Locals, Autos sau Watch
  • variabile statice
  • clase cu atributul DebuggerTypeProxy
  • câmpuri din interiorul structs

setați punctele de întrerupere a datelor(numai C ++ nativ)

punctele de întrerupere a datelor se rup atunci când se modifică o valoare stocată la o adresă de memorie specificată. Dacă valoarea este citită, dar nu modificată, execuția nu se rupe.

pentru a seta un punct de întrerupere a datelor:

  1. într-un proiect c++, începeți depanarea și așteptați până când se atinge un punct de întrerupere. În meniul Debug, alegeți New Breakpoint > Data Breakpoint.

    de asemenea, puteți selecta New > Data Breakpoint în fereastra Breakpoints sau faceți clic cu butonul din dreapta pe un element din fereastra Autos, Watch sau Locals și selectați Break when value changes din meniul contextual.

  2. în caseta Adresă, tastați o adresă de memorie sau o expresie care se evaluează la o adresă de memorie. De exemplu, tastați &avar pentru a rupe atunci când conținutul variabilei avar se modifică.

  3. în meniul derulant număr de octeți, selectați numărul de octeți pe care doriți să îl urmărească depanatorul. De exemplu, dacă selectați 4, depanatorul va urmări cei patru octeți începând de la &avar și se va rupe dacă oricare dintre acești octeți își schimbă valoarea.

punctele de întrerupere a datelor nu funcționează în următoarele condiții:

  • un proces care nu este depanat scrie în locația de memorie.
  • locația memoriei este partajată între două sau mai multe procese.
  • locația memoriei este actualizată în kernel. De exemplu, dacă memoria este transmisă funcției Windows pe 32 de biți ReadFile, memoria va fi actualizată din modul kernel, astfel încât depanatorul nu se va rupe la actualizare.
  • unde expresia ceasului este mai mare de 4 octeți pe hardware pe 32 de biți și 8 octeți pe hardware pe 64 de biți. Aceasta este o limitare a arhitecturii x86.

notă

  • punctele de întrerupere a datelor depind de adrese de memorie specifice. Adresa unei variabile se modifică de la o sesiune de depanare la alta, astfel încât punctele de întrerupere a datelor sunt dezactivate automat la sfârșitul fiecărei sesiuni de depanare.

  • dacă setați un punct de întrerupere a datelor pe o variabilă locală, punctul de întrerupere rămâne activat atunci când funcția se termină, dar adresa de memorie nu mai este aplicabilă, astfel încât comportamentul punctului de întrerupere este imprevizibil. Dacă setați un punct de întrerupere a datelor pe o variabilă locală, ar trebui să ștergeți sau să dezactivați punctul de întrerupere înainte ca funcția să se încheie.

gestionarea punctelor de întrerupere în fereastra puncte de întrerupere

puteți utiliza fereastra puncte de întrerupere pentru a vedea și gestiona toate punctele de întrerupere din soluția dvs. Această locație centralizată este utilă în special într-o soluție mare sau pentru scenarii complexe de depanare în care punctele de întrerupere sunt critice.

în fereastra puncte de întrerupere, puteți căuta, sorta, filtra, activa/dezactiva sau șterge puncte de întrerupere. De asemenea, puteți seta condiții și acțiuni sau puteți adăuga o nouă funcție sau un punct de întrerupere a datelor.

pentru a deschide fereastra Breakpoints, selectați Debug > Windows> Breakpoints sau apăsați Ctrl+Alt+B.

Breakpoints window

pentru a selecta coloanele de afișat în fereastra Breakpoints, selectați Show Columns. Selectați un antet de coloană pentru a sorta lista punctelor de întrerupere după coloana respectivă.

etichete Breakpoint

puteți utiliza etichete pentru a sorta și filtra lista punctelor de întrerupere din fereastra Breakpoints.

  1. pentru a adăuga o etichetă la un punct de întrerupere, faceți clic cu butonul din dreapta pe punctul de întrerupere din fereastra cod sursă sau puncte de întrerupere, apoi selectați Editare etichete. Adăugați o etichetă nouă sau alegeți una existentă, apoi selectați OK.
  2. Sortați lista punctelor de întrerupere din fereastra punctelor de întrerupere selectând etichetele, Condițiile sau alte anteturi de coloană. Puteți selecta coloanele de afișat selectând Afișați coloanele din bara de instrumente.

export și import puncte de întrerupere

pentru a salva sau a partaja starea și locația punctelor de întrerupere, le puteți exporta sau importa.

  • pentru a exporta un singur punct de întrerupere într-un fișier XML, faceți clic dreapta pe punctul de întrerupere din fereastra cod sursă sau puncte de întrerupere și selectați Export sau export selectat. Selectați o locație de export, apoi selectați Salvare. Locația implicită este folderul soluție.
  • pentru a exporta mai multe puncte de întrerupere, în fereastra puncte de întrerupere, selectați casetele de lângă punctele de întrerupere sau introduceți criterii de căutare în câmpul de căutare. Selectați exportați toate punctele de întrerupere care corespund pictogramei criteriilor de căutare curente și salvați fișierul.
  • pentru a exporta toate punctele de întrerupere, deselectați toate casetele și lăsați câmpul de căutare necompletat. Selectați exportați toate punctele de întrerupere care corespund pictogramei criteriilor de căutare curente și salvați fișierul.
  • pentru a importa puncte de întrerupere, în fereastra puncte de întrerupere, selectați pictograma import puncte de întrerupere dintr-un fișier, navigați la locația fișierului XML și selectați Deschidere.

Set breakpoints from debugger windows

de asemenea, puteți seta breakpoints din stiva de apeluri și dezasamblarea debugger windows.

setarea unui punct de întrerupere în fereastra stivei de apeluri

pentru a întrerupe instrucțiunea sau linia la care revine o funcție de apelare, puteți seta un punct de întrerupere în fereastra stivei de apeluri.

pentru a seta un punct de întrerupere în fereastra stivă de apeluri:

  1. pentru a deschide fereastra stivei de apeluri, trebuie să fiți întrerupt în timpul depanării. Selectați Debug > Windows > Call Stack sau apăsați Ctrl+Alt+C.

  2. în fereastra stivă de apeluri, faceți clic dreapta pe funcția de apelare și selectați Breakpoint > Insert Breakpoint sau apăsați F9.

    un simbol breakpoint apare lângă numele apelului funcției din marginea stângă a stivei de apeluri.

punctul de întrerupere a stivei de apeluri apare în fereastra puncte de întrerupere ca adresă, cu o locație de memorie care corespunde următoarei instrucțiuni executabile din funcție.

depanatorul se rupe la instrucțiune.

pentru mai multe informații despre stiva de apeluri, consultați Cum se utilizează fereastra stivă de apeluri.

pentru a urmări vizual punctele de întrerupere în timpul executării codului, consultați metodele de hartă din stiva de apeluri în timpul depanării.

Setați un punct de întrerupere în fereastra de demontare

  1. pentru a deschide fereastra de dezasamblare, trebuie să fiți întrerupt în timpul depanării. Selectați Depanare > Windows > demontare sau apăsați Ctrl + Alt + D.

  2. în fereastra de dezasamblare, faceți clic în marginea din stânga a instrucțiunii pe care doriți să o rupeți. De asemenea, îl puteți selecta și apăsați F9 sau faceți clic dreapta și selectați Breakpoint > Insert Breakpoint.

a se vedea, de asemenea,

  • ce este depanarea?
  • scrie mai bine C # cod folosind Visual Studio
  • prima privire la depanare
  • depanarea breakpoints în Visual Studio debugger

Lasă un răspuns

Adresa ta de email nu va fi publicată.