käytä keskeytyspisteitä Visual Studion debuggerissa

  • 06/30/2020
  • 12 luettavat minuutit
    • M
    • g
    • j
    • v
    • g
    • +8

Keskeytyspisteet ovat yksi tärkeimmistä virheenkorjaustekniikoista kehittäjäsi työkalupakissa. Asetat keskeytyspisteet minne haluat keskeyttää debuggerin suorituksen. Haluat esimerkiksi nähdä koodimuuttujien tilan tai katsoa puhelupinoa tietyssä keskeytyspisteessä. Jos yrität ratkaista varoitusta tai ongelmaa keskeytyspisteiden käytön aikana, katso keskeytyspisteiden vianmääritys Visual Studion debuggerissa.

Huomautus

jos tiedät tehtävän tai ongelman, jota yrität ratkaista, mutta sinun on tiedettävä, millaista keskeytyspistettä käytät, katso FAQ – Etsi virheenkorjausominaisuus.

Aseta keskeytyspisteet lähdekoodissa

voit asettaa keskeytyspisteen mille tahansa suoritettavan koodin riville. Esimerkiksi seuraavassa C# – koodissa koodiriville voitiin asettaa murtopiste muuttujan tehtävän (int testInt = 1), for silmukan tai minkä tahansa for silmukan sisällä olevan koodin avulla. Et voi asettaa keskeytyspistettä menetelmän allekirjoituksille, nimiavaruuden tai luokan ilmoituksille tai muuttujien ilmoituksille, jos määritystä ei ole eikä getteriä/setteriä ole.

asettaaksesi keskeytyspisteen lähdekoodiin, Napsauta koodirivin vieressä olevaa vasenta reunaa. Voit myös valita rivin ja painaa F9: ää, valita Vianetsintä > Vaihda keskeytyspiste tai napsauta hiiren kakkospainikkeella ja valitse keskeytyspiste > lisää keskeytyspiste. Keskeytyspiste näkyy punaisena pisteenä vasemmassa reunassa.

useimmissa kielissä, mukaan lukien C#, keskeytyspisteet ja nykyiset suoritusrivit korostuvat automaattisesti. C++ – koodissa voit ottaa käyttöön keskeytyspisteiden ja nykyisten rivien korostuksen valitsemalla Työkalut (tai vianetsintä) > Asetukset > Vianetsintä > Korosta koko lähderivi keskeytyspisteille ja nykyinen lauseke (vain C++).

 Aseta keskeytyspiste

kun debugoit, suoritus pysähtyy keskeytyspisteessä, ennen kuin kyseisen rivin koodi suoritetaan. Keskeytyspisteen symbolissa näkyy keltainen nuoli.

katkeamispisteessä seuraavassa esimerkissä testInt arvo on edelleen 1. Niin, arvo ei ole muuttunut sen jälkeen, kun muuttuja alustettiin (asetettu arvoon 1), koska lauseke keltaisella ei ole vielä suoritettu.

 keskeytyspisteen suoritus pysähtyi

kun debuggeri pysähtyy keskeytyspisteeseen, voit tarkastella sovelluksen nykytilaa, mukaan lukien muuttujan arvot ja puhelupino.

tässä on muutamia yleisiä ohjeita raja-arvojen kanssa työskentelystä.

  • keskeytyspiste on toggle. Voit poistaa tai asettaa sen uudelleen napsauttamalla sitä, painamalla F9-näppäintä tai käyttämällä Vianetsintä > – asetusta.

  • jos haluat poistaa keskeytyspisteen poistamatta sitä, siirrä se hiiren kakkospainikkeella tai napsauta sitä hiiren kakkospainikkeella ja valitse Poista keskeytyspiste käytöstä. Käytöstä poistetut keskeytyspisteet näkyvät tyhjinä pisteinä vasemmassa reunassa tai Keskeytyspisteiden ikkunassa. Jos haluat ottaa keskeytyspisteen uudelleen käyttöön, siirrä sitä hiiren kakkospainikkeella tai valitse Ota keskeytyspiste käyttöön.

  • aseta ehtoja ja toimintoja, lisää ja muokkaa etikettejä tai vie keskeytyspiste napsauttamalla sitä hiiren kakkospainikkeella ja valitsemalla sopiva komento tai leijumalla sen yllä ja valitsemalla asetuskuvake.

Keskeytyspistetoiminnot ja tracepoints

tracepoint on keskeytyspiste, joka tulostaa viestin Lähtöikkunaan. Tracepoint voi toimia ohjelmointikielessä kuin väliaikainen jäljitysilmoitus eikä keskeytä koodin suoritusta. Voit luoda tracepoint asettamalla erityinen toiminto keskeytyspisteen Asetukset-ikkunassa. Tarkemmat ohjeet on ohjeaiheessa Tracepoints-järjestelmän käyttö Visual Studion debuggerissa.

Breakpoint conditions

voit määrittää, milloin ja missä breakpoint suoritetaan asettamalla ehtoja. Ehto voi olla mikä tahansa kelvollinen lauseke, jonka debuggeri tunnistaa. Lisätietoja kelvollisista lausekkeista on Vianetsintätyökalun lausekkeissa.

asetetaan raja-arvoehto:

  1. Napsauta keskeytyspistesymbolia hiiren kakkospainikkeella ja valitse Ehdot (tai paina Alt + F9, C). Tai siirrä keskeytyspistesymbolin päälle, valitse asetuskuvake ja valitse sitten ehdot keskeytyspisteen Asetukset-ikkunassa.

    voit myös asettaa ehtoja Keskeytyspisteikkunassa napsauttamalla keskeytyspistettä hiiren kakkospainikkeella ja valitsemalla Asetukset ja valitsemalla sitten ehdot.

     keskeytyspisteen asetukset

  2. valitse pudotusvalikossa ehdollinen lauseke, paina määrää tai Suodata ja aseta arvo sen mukaisesti.

  3. valitse Sulje tai paina Ctrl+Enter sulkeaksesi keskeytyspisteen asetusikkunan. Tai sulje ikkuna valitsemalla Keskeytyspisteistä OK.

Keskeytyspisteet, joissa on asetetut ehdot, näkyvät + – symbolilla lähdekoodi-ja Keskeytyspisteiden ikkunoissa.

luo ehdollinen lauseke

kun valitset ehdollisen lausekkeen, voit valita kahden ehdon välillä: onko tosi vai muuttuuko. Choose on totta rikkoa, kun lauseke on tyydytetty, tai kun muutettu rikkoa, kun lausekkeen arvo on muuttunut.

seuraavassa esimerkissä murtopiste osuu vasta, kun testInt arvo on 4:

 Breakpoint condition is true

seuraavassa esimerkissä breakpoint is hit only when the value of testInt changes:

keskeytyspiste kun muutetaan

jos asetat keskeytyspisteen ehdon virheellisellä syntaksilla, tulee näkyviin varoitusviesti. Jos määrität keskeytyspisteen ehdon, jossa on voimassa oleva syntaksi, mutta virheellinen semantiikka, varoitusviesti tulee näkyviin, kun keskeytyspistettä ensimmäisen kerran osutaan. Kummassakin tapauksessa debuggeri rikkoutuu, kun se osuu virheelliseen keskeytyspisteeseen. Raja-arvo ohitetaan vain, jos ehto on voimassa ja arvo on false.

Huomautus

kun muutetaan kenttää, debuggeri ei pidä ehdon ensimmäistä arviointia muutoksena, joten se ei osu ensimmäisen arvioinnin keskeytyspisteeseen.

käytä Oliotunnuksia ehdollisissa lausekkeissa (vain C# ja F#)

on aikoja, jolloin haluat tarkkailla tietyn objektin käyttäytymistä. Kannattaa esimerkiksi selvittää, miksi jokin esine on laitettu kokoelmaan useammin kuin kerran. C#: ssa ja F#: ssa voi luoda oliotunnuksia tietyille referenssityyppien esiintymille ja käyttää niitä keskeytyspisteolosuhteissa. Objektin tunnus syntyy common language runtime (CLR) – vianetsintäpalveluista ja liittyy objektiin.

luodaksesi objektin ID:

  1. Aseta koodiin keskeytyspiste johonkin paikkaan sen jälkeen, kun kohde on luotu.

  2. Aloita vianetsintä ja kun suoritus pysähtyy keskeytyspisteessä, valitse Vianetsintä > Windows > paikalliset (tai avaa paikalliset-ikkuna painamalla Ctrl + Alt + V, L).

    Etsi tietty objekti-ilmentymä paikalliset-ikkunasta, napsauta sitä hiiren kakkospainikkeella ja valitse Make Object ID.

    sinun pitäisi nähdä $ plus numero paikallisten ikkunassa. Tämä on kohteen tunnus.

  3. Lisää uusi keskeytyspiste kohtaan, jota haluat tutkia, esimerkiksi silloin, kun kohde on tarkoitus lisätä kokoelmaan. Napsauta keskeytyspistettä hiiren kakkospainikkeella ja valitse ehdot.

  4. käytä objektin tunnistetta ehdollisessa lausekkeessa. Esimerkiksi jos muuttuja item on kokoelmaan lisättävä objekti, select on true ja type item = = $<n>, missä <n> on objektin ID-numero.

    suoritus murtuu siinä vaiheessa, kun kyseinen esine lisätään kokoelmaan.

    poistaaksesi objektin ID: n napsauta paikalliset-ikkunassa olevaa muuttujaa hiiren kakkospainikkeella ja valitse Poista objektin tunnus.

Huomautus

Oliotunnukset luovat heikkoja viittauksia, eivätkä estä esineen roskaantumista. Ne ovat voimassa vain nykyisessä vianetsintäistunnossa.

Aseta osumamäärän ehto

jos epäilet, että koodisi silmukka alkaa käyttäytyä huonosti tietyn iterointimäärän jälkeen, voit asettaa keskeytyspisteen, joka pysäyttää suorituksen kyseisen osumamäärän jälkeen, sen sijaan, että sinun tarvitsee toistuvasti painaa F5: tä saavuttaaksesi kyseisen iteraation.

valitse keskeytyspisteen Asetukset-ikkunan olosuhteissa Osumamäärä ja määritä sitten iteraatioiden lukumäärä. Seuraavassa esimerkissä keskeytyspiste asetetaan osumaan joka toiseen iteraatioon:

 Breakpoint hit count

Aseta suodattimen ehto

voit rajoittaa keskeytyspisteen ampumaan vain tiettyihin laitteisiin tai tiettyihin prosesseihin ja kierteisiin.

keskeytyspisteen Asetukset-ikkunan olosuhteissa valitse suodatin ja syötä sitten yksi tai useampi seuraavista lausekkeista:

  • MachineName = “name “
  • ProcessId = arvo
  • ProcessName = “name”
  • ThreadId = arvo
  • ThreadName = “name”

Liitä merkkijonon arvot lainausmerkkeihin. Voit yhdistää lausekkeita käyttämällä & (ja), || (tai), ! (Ei) ja sulkeita.

Aseta funktion raja-arvot

voit katkaista suorituksen, kun funktiota kutsutaan. Tämä on hyödyllistä esimerkiksi silloin, kun tiedät funktion nimen, mutta et sen sijaintia. Se on myös hyödyllinen, jos sinulla on samannimisiä toimintoja ja haluat rikkoa ne kaikki (kuten ylikuormitetut toiminnot tai toiminnot eri projekteissa).

funktion keskeytyspisteen asettaminen:

  1. valitse Debug > Uusi keskeytyspiste > Funktion keskeytyspiste tai paina Ctrl + K, B.

    Voit myös valita uuden > Funktion keskeytyspisteen Keskeytyspisteikkunassa.

  2. kirjoita uuden funktion keskeytyspiste-valintaikkunassa funktion nimi funktion nimi-ruutuun.

    funktion määrittelyn rajaamiseksi:

    • käytä täysin hyväksyttyä funktion nimeä.

      esimerkki: Namespace1.ClassX.MethodA()

    • lisää ylikuormitetun toiminnon parametrityypit.

      esimerkki: MethodA(int, string)

    • käytä sitä!”moduulin määrittelevä symboli.

      esimerkki: App1.dll!MethodA

    • käytä kontekstioperaattoria natiivissa C++: ssa.

      {function, , }

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

  3. Valitse kieli-pudotusvalikosta funktion kieli.

  4. valitse OK.

Aseta funktion keskeytyspiste käyttäen muistiosoitetta (vain natiivi C++)

voit käyttää objektin osoitetta funktion keskeytyspisteen asettamiseen menetelmässä, jota kutsutaan tietyn luokan esiintymäksi. Esimerkiksi, jos kohde on osoitettavissa tyyppiä my_class, voit asettaa funktion keskeytyspisteen my_method – menetelmälle, jota instanssi kutsuu.

  1. Aseta keskeytyspiste jonnekin, kun luokan esimerkki on instantioitu.

  2. Etsi instanssin osoite (esimerkiksi 0xcccccccc).

  3. valitse Debug > Uusi keskeytyspiste > Funktion keskeytyspiste tai paina Ctrl + K, B.

  4. lisää seuraava funktion nimi-ruutuun ja valitse C++ – kieli.

    ((my_class *) 0xcccccccc)->my_method

Set data breakpoints (. Net Core 3.0 tai korkeampi)

tietomurtopisteet rikkovat suorituksen, kun tietyn kohteen ominaisuus muuttuu.

aseta tietomurtopiste

  1. aloita. Net-Ydinprojektissa vianetsintä ja odota, kunnes keskeytyspiste on saavutettu.

  2. Napsauta automaattiset, katsella tai paikalliset-ikkunassa ominaisuutta hiiren kakkospainikkeella ja valitse Break, kun arvo muuttuu kontekstivalikossa.

     hallittu Tietomurtopiste

. Net-ytimen tietomurtopisteet eivät toimi:

  • ominaisuudet, joita ei voi laajentaa työkaluvihjeessä, paikallis -, automaatti-tai Kelloikkunassa
  • staattiset muuttujat
  • luokat, joilla on DebuggerTypeProxy-attribuutti
  • kentät rakenteiden sisällä

Aseta tietomurtopisteet (vain natiivi C++)

tietomurtopisteet katkaisevat suorituksen, kun tiettyyn muistiosoitteeseen tallennettu arvo muuttuu. Jos arvo luetaan, mutta sitä ei muuteta, toteutus ei murru.

aseta tietomurtopiste:

  1. aloita vianetsintä C++ – projektissa ja odota keskeytyspisteen saavuttamista. Valitse Debug-valikosta Uusi keskeytyspiste > tietojen keskeytyspiste.

    Voit myös valita uuden > Tietomurtopisteen Keskeytyspisteikkunassa tai napsauta hiiren kakkospainikkeella kohdetta autot, katsella tai paikalliset-ikkunassa ja valitse keskeytä, kun arvo muuttuu kontekstivalikossa.

  2. Kirjoita Osoiteruutuun muistiosoite tai lauseke, joka arvioi muistiosoitteeksi. Esimerkiksi tyyppi &avar katkeaa, kun muuttujan avar sisältö muuttuu.

  3. valitse tavumäärä-pudotusvalikosta niiden tavujen määrä, joita haluat debuggerin tarkkailevan. Jos valitset esimerkiksi 4, debuggeri katsoo neljä tavua alkaen &avar ja katkeaa, jos jokin näistä tavuista muuttaa arvoa.

tietomurtopisteet eivät toimi seuraavissa olosuhteissa:

  • prosessi, jota ei ole debugoitu, kirjoittaa muistipaikalle.
  • muistipaikka jaetaan kahden tai useamman prosessin kesken.
  • muistin sijainti päivittyy ytimen sisällä. Jos esimerkiksi muisti siirtyy 32-bittiselle Windows ReadFile – funktiolle, muisti päivittyy kernel-tilasta, joten debuggeri ei katkea päivityksessä.
  • , jossa kellon lauseke on suurempi kuin 4 tavua 32-bittisellä laitteistolla ja 8 tavua 64-bittisellä laitteistolla. Tämä on x86-arkkitehtuurin rajoitus.

Huomautus

  • tietomurtopisteet riippuvat tietyistä muistiosoitteista. Muuttujan osoite muuttuu vianetsintäistunnosta toiseen, joten tietomurtopisteet poistetaan automaattisesti käytöstä jokaisen vianetsintäistunnon lopussa.

  • jos asetat tietomurtopisteen paikalliselle muuttujalle, keskeytyspiste pysyy käytössä, Kun toiminto päättyy, mutta muistiosoite ei ole enää sovellettavissa, joten keskeytyspisteen käyttäytyminen on arvaamatonta. Jos asetat tietomurtopisteen paikalliselle muuttujalle, sinun pitäisi poistaa tai poistaa keskeytyspiste ennen kuin toiminto päättyy.

Hallitse keskeytyspisteitä Keskeytyspisteikkunassa

voit käyttää Keskeytyspisteikkunaa nähdäksesi ja hallitaksesi kaikkia ratkaisusi keskeytyspisteitä. Tämä keskitetty sijainti on erityisen hyödyllinen suuressa ratkaisussa tai monimutkaisissa virheenkorjaustilanteissa, joissa keskeytyspisteet ovat kriittisiä.

Keskeytyspisteiden ikkunassa voit etsiä, lajitella, suodattaa, ottaa käyttöön/poistaa tai poistaa keskeytyspisteitä. Voit myös asettaa ehtoja ja toimia tai lisätä uuden toiminnon tai tietojen keskeytyspisteen.

avataksesi Keskeytyspisteikkunan, valitse Debug > Windows > Keskeytyspisteet tai paina Ctrl+Alt + B.

Keskeytyspisteikkuna

valitaksesi Keskeytyspisteikkunassa näytettävät sarakkeet, valitse Näytä sarakkeet. Valitse sarakkeen otsake, kun haluat lajitella keskeytyspisteet kyseisen sarakkeen mukaan.

Keskeytyspisteiden merkinnät

voit lajitella ja suodattaa keskeytyspisteiden luettelon Keskeytyspisteiden ikkunassa.

  1. lisätäksesi nimikkeen keskeytyspisteeseen napsauta hiiren kakkospainikkeella keskeytyspistettä lähdekoodissa tai Keskeytyspisteikkunassa ja valitse sitten Muokkaa nimikkeitä. Lisää uusi etiketti tai valitse olemassa oleva ja valitse sitten OK.
  2. Järjestä keskeytyspisteiden luettelo Keskeytyspisteikkunassa valitsemalla nimikkeet, Ehdot tai muut sarakeotsikot. Voit valita näytettävät sarakkeet valitsemalla työkalupalkin Näytä sarakkeet.

vienti-ja tuontirajat

voit tallentaa tai jakaa keskeytyspisteiden tilan ja sijainnin, voit viedä tai tuoda niitä.

  • viedäksesi yhden keskeytyspisteen XML-tiedostoon, napsauta hiiren kakkospainikkeella keskeytyspistettä lähdekoodi-tai Keskeytyspisteikkunassa ja valitse Vie tai vie valittu. Valitse vientipaikka ja valitse sitten Tallenna. Oletussijainti on ratkaisukansio.
  • jos haluat viedä useita keskeytyspisteitä, valitse Keskeytyspisteiden vieressä olevat ruudut tai syötä hakukenttään hakukriteerit. Valitse Vie kaikki keskeytyspisteet, jotka vastaavat nykyisiä hakukriteerejä, ja tallenna tiedosto.
  • jos haluat viedä kaikki keskeytyspisteet, poista valinta kaikista ruuduista ja jätä hakukenttä tyhjäksi. Valitse Vie kaikki keskeytyspisteet, jotka vastaavat nykyisiä hakukriteerejä, ja tallenna tiedosto.
  • jos haluat tuoda keskeytyspisteitä, valitse Keskeytyspisteikkunassa tuo keskeytyspisteet tiedostokuvakkeesta, siirry XML – tiedoston sijaintiin ja valitse Avaa.

aseta raja-arvot debuggeriikkunoista

voit asettaa raja-arvot myös Kutsupinosta ja debuggeriikkunoiden purkamisesta.

Aseta keskeytyspiste kutsupinon ikkunaan

jos haluat rikkoa käskyn tai rivin, johon kutsutoiminto palaa, voit asettaa keskeytyspisteen kutsupinon ikkunaan.

keskeytyspisteen asettaminen kutsupinon ikkunaan:

  1. avataksesi Puhelupino-ikkunan, sinun on oltava tauolla virheenkorjauksen aikana. Valitse Debug > Windows > Soita pinoon tai paina Ctrl+Alt+C.

  2. Napsauta kutsupinon ikkunassa kutsutoimintoa hiiren kakkospainikkeella ja valitse keskeytyspiste > lisää keskeytyspiste tai paina F9.

    keskeytyspistemerkki esiintyy funktion kutsunimen vieressä kutsupinon vasemmassa reunassa.

kutsupinon keskeytyspiste näkyy Keskeytyspisteiden ikkunassa osoitteena, jonka muistipaikka vastaa funktion seuraavaa suoritettavaa ohjetta.

debuggeri katkeaa ohjeen mukaan.

lisätietoja soittopinosta on ohjeaiheessa: käytä Soittopinon ikkunaa.

jos keskeytyspisteitä seurataan visuaalisesti koodin suorituksen aikana, katso Karttamenetelmät kutsupinossa virheenkorjauksen aikana.

Aseta keskeytyspiste Purkuikkunaan

  1. avataksesi Purkuikkunan sinun on oltava tauolla virheenkorjauksen aikana. Valitse Debug > Windows > purkaminen tai paina Ctrl + Alt + D.

  2. Napsauta Purkuikkunassa sen ohjeen vasenta reunaa, johon haluat murtautua. Voit myös valita sen ja painaa F9: ää tai napsauta hiiren kakkospainikkeella ja valitse keskeytyspiste > lisää keskeytyspiste.

Katso myös

  • mikä on vianetsintä?
  • Kirjoita parempi C# – koodi Visual Studion avulla
  • vianetsintä
  • vianetsintä

Vastaa

Sähköpostiosoitettasi ei julkaista.