Bruke avbruddspunkter I Visual Studio debugger
- 06/30/2020
- 12 minutter å lese
-
- M
- g
- j
- v
- g
-
+8
Breakpoints er en av de viktigste feilsøkingsteknikkene i utviklerens verktøykasse. Du angir stoppunkter der du vil pause debugger kjøring. Du kan for eksempel se tilstanden til kodevariabler eller se på anropsstakken ved et bestemt avbruddspunkt. Hvis du prøver å løse en advarsel eller et problem mens du bruker avbruddspunkter, Kan Du Se Feilsøke avbruddspunkter i Visual Studio debugger.
Merk
hvis du vet oppgaven eller problemet du prøver å løse, men du trenger å vite hva slags stoppunkt du skal bruke, se FAQ-Finn feilsøkingsfunksjonen.
- Angi stoppunkter i kildekoden
- Stoppunkthandlinger og tracepoints
- Avbruddsbetingelser
- Opprett et betinget uttrykk
- Bruk Objekt-Ider i betingede uttrykk (Kun C# Og F#)
- Angi en hit count condition
- Angi en filterbetingelse
- Angi funksjonsavbruddspunkter
- Angi et funksjonsavbruddspunkt ved hjelp av en minneadresse (bare innebygd C++)
- Angi dataavbruddspunkter (. NET Core 3.0 eller høyere)
- Angi dataavbruddspunkter (bare innebygd C++)
- Behandle avbruddspunkter i Avbruddspunkter-vinduet
- Avbruddspunktetiketter
- Eksporter og importer avbruddspunkter
- Angi avbruddspunkter fra feilsøkingsvinduer
- Angi et stoppunkt i Samtalestakkvinduet
- Sett et stoppunkt i Demonteringsvinduet
- Se også
Angi stoppunkter i kildekoden
Du kan angi et stoppunkt på en hvilken som helst linje med kjørbar kode. I Følgende c# – kode kan du for eksempel angi et stoppunkt på kodelinjen med variabeltilordningen (int testInt = 1
), for
– løkken eller en hvilken som helst kode i for
– løkken. Du kan ikke angi et stoppunkt på metodesignaturer, erklæringer for et navneområde eller en klasse, eller variable erklæringer hvis det ikke er noen tildeling og ingen getter / setter.
Hvis du vil angi et stoppunkt i kildekoden, klikker du helt til venstre ved siden av en kodelinje. Du kan også velge linjen og trykke F9, Velge Debug > Veksle Stoppunkt, eller høyreklikk og velg Stoppunkt > Sett inn stoppunkt. Avbruddspunktet vises som en rød prikk i venstre marg.
for de fleste språk, Inkludert C#, blir stoppunkt og nåværende utførelseslinjer automatisk uthevet. For c++ – kode kan du slå på utheving av stoppunkt og nåværende linjer ved å velge Verktøy (Eller Feilsøke) > Alternativer > Feilsøking > Uthev hele kildelinjen for stoppunkt og gjeldende setning (Kun C++).
når du feilsøker, stopper kjøringen ved stoppunktet, før koden på den linjen utføres. Avbruddssymbolet viser en gul pil.
ved avbruddspunktet i følgende eksempel er verdien testInt
fortsatt 1. Så verdien har ikke endret seg siden variabelen ble initialisert (satt til en verdi på 1) fordi setningen i gul ennå ikke er utført.
når feilsøkeren stopper ved stoppunktet, kan du se på appens nåværende tilstand, inkludert variable verdier og anropsstakken.
her er noen generelle instruksjoner for arbeid med stoppunkter.
-
stoppunktet er en veksle. Du kan klikke På Den, trykke F9, eller Bruke Debug > Toggle Breakpoint for å slette eller sette den inn igjen.
-
hvis du vil deaktivere et avbruddspunkt uten å slette det, holder du markøren over eller høyreklikker det og velger Deaktiver avbruddspunkt. Deaktiverte avbruddspunkter vises som tomme prikker i Venstre marg eller Avbruddspunkter-vinduet. Hvis du vil aktivere et avbruddspunkt på nytt, holder du markøren over eller høyreklikker det og velger Aktiver avbruddspunkt.
-
Angi betingelser og handlinger, legg til og rediger etiketter, eller eksporter et avbruddspunkt ved å høyreklikke på det og velge riktig kommando, eller sveve over det og velge innstillinger-ikonet.
Stoppunkthandlinger og tracepoints
et tracepoint er et stoppunkt som skriver ut en melding til Utdatavinduet. Et tracepoint kan fungere som en midlertidig sporingsoppgave i programmeringsspråket og stopper ikke kjøring av kode. Du oppretter et tracepoint ved å angi en spesiell handling i Vinduet Stoppunktinnstillinger. Hvis du vil ha detaljerte instruksjoner, kan Du se Bruke tracepoints i Visual Studio debugger.
Avbruddsbetingelser
du kan kontrollere når og hvor et avbruddspunkt utføres ved å angi betingelser. Betingelsen kan være et gyldig uttrykk som debuggeren gjenkjenner. Hvis du vil ha mer informasjon om gyldige uttrykk, kan du se Uttrykk i feilsøkingsprogrammet.
slik angir du en stoppunkt-tilstand:
-
Høyreklikk på avbruddssymbolet og velg Betingelser (eller trykk Alt + F9, C). Eller hold pekeren over avbruddssymbolet, velg innstillinger-ikonet, og velg Deretter Betingelser i Avbruddssymbolet.
du kan også angi betingelser i Avbruddspunkter-vinduet ved å høyreklikke et avbruddspunkt og velge Innstillinger og Deretter Betingelser.
-
i rullegardinmenyen velger Du Betinget Uttrykk, Treffantall eller Filter, og angir verdien tilsvarende.
-
Velg Lukk Eller trykk Ctrl + Enter for å lukke Vinduet Stoppunktinnstillinger. Eller velg OK I Avbruddspunkter-vinduet for å lukke dialogboksen.
Avbruddspunkter med betingelser som er angitt, vises med et + – symbol i kildekoden og Avbruddspunkter-vinduene.
Opprett et betinget uttrykk
når Du velger Betinget Uttrykk, kan du velge mellom To betingelser: er sant eller når endret. Velg er sant for å bryte når uttrykket er oppfylt, Eller når endret for å bryte når verdien av uttrykket er endret.
i følgende eksempel treffes avbruddspunktet bare når verdien testInt
er 4:
i følgende eksempel treffes avbruddspunktet bare når verdien av testInt
endres:
hvis du angir en avbruddssituasjon med ugyldig syntaks, vises en advarsel. Hvis du angir en avbruddsbetingelse med gyldig syntaks, men ugyldig semantikk, vises en advarsel første gang avbruddspunktet treffes. I begge tilfeller bryter debuggeren når den treffer det ugyldige avbruddspunktet. Avbruddspunktet hoppes over bare hvis betingelsen er gyldig og evalueres til false
.
Merk
for feltet når endret, anser ikke debugger den første evalueringen av betingelsen som en endring, så treffer ikke stoppunktet på den første evalueringen.
Bruk Objekt-Ider i betingede uttrykk (Kun C# Og F#)
det er tider når du vil observere oppførselen til et bestemt objekt. Du kan for eksempel finne ut hvorfor et objekt ble satt inn i en samling mer enn en gang. I C# Og F# kan du opprette objekt-Ider for bestemte forekomster av referansetyper, og bruke dem i avbruddsbetingelser. Objekt-IDEN genereres av feilsøkingstjenestene common language runtime (CLR) og er knyttet til objektet.
for å opprette En Objekt-ID:
-
Sett et stoppunkt i koden et sted etter at objektet er opprettet.
-
Start feilsøking, og når kjøringen stopper ved avbruddspunktet, velger Du Feilsøking > Windows > Lokalbefolkning (eller Trykk Ctrl + Alt + V, L) for å åpne Lokalbefolkning-vinduet.
finn den spesifikke objektforekomsten i Lokalbefolkningsvinduet, høyreklikk på Den og velg Lag Objekt-ID.
du bør se en $ pluss et nummer i Lokalbefolkningsvinduet. Dette er objekt-ID.
-
Legg til et nytt avbruddspunkt på det punktet du vil undersøke, for eksempel når objektet skal legges til i samlingen. Høyreklikk avbruddspunktet og velg Betingelser.
-
Bruk Objekt-IDEN I Feltet Betinget Uttrykk. Hvis variabelen
item
for eksempel er objektet som skal legges til i samlingen, velger du er sann og skriver element = = $ < n>, der <n> er objekt-ID-nummeret.Utførelse vil bryte når objektet skal legges til samlingen.
hvis Du vil slette Objekt-ID-EN, høyreklikker du variabelen i Lokalbefolkningsvinduet og velger Slett Objekt-ID.
Obs!
Objekt-Ider oppretter svake referanser, og forhindrer ikke at objektet samles inn søppel. De er bare gyldige for gjeldende feilsøkingsøkt.
Angi en hit count condition
hvis du mistenker at en sløyfe i koden din begynner å oppføre seg dårlig etter et visst antall iterasjoner, kan du angi et stoppunkt for å stoppe kjøring etter det antall treff, i stedet for å måtte trykke F5 gjentatte ganger for å nå den iterasjonen.
under Betingelser i Vinduet Stoppunktinnstillinger velger Du Antall Treff, og angir deretter antall gjentakelser. I følgende eksempel er stoppunktet satt til å treffe på hver annen iterasjon:
Angi en filterbetingelse
du kan begrense et stoppunkt til bare å brenne på bestemte enheter, eller i bestemte prosesser og tråder.
under Betingelser i Vinduet Avbruddspunkt velger Du Filter, og deretter skriver du inn ett eller flere av følgende uttrykk:
- MachineName = “navn”
- ProcessId = verdi
- ProcessName = “navn”
- ThreadId = verdi
- ThreadName = “navn”
Omslutte strengverdier i doble anførselstegn. Du kan kombinere klausuler med &
(OG), ||
(ELLER), !
(IKKE) og parenteser.
Angi funksjonsavbruddspunkter
du kan bryte kjøring når en funksjon kalles. Dette er nyttig, for eksempel når du kjenner funksjonsnavnet, men ikke plasseringen. Det er også nyttig hvis du har funksjoner med samme navn, og du vil bryte på dem alle (for eksempel overbelastede funksjoner eller funksjoner i ulike prosjekter).
slik angir du et stoppunkt for funksjon:
-
Velg Feilsøking > Nytt Stoppunkt > Funksjon Stoppunkt, eller trykk Ctrl + K, B.
Du kan også velge Nytt > Funksjon Stoppunkt i Stoppunkt-vinduet.
-
i Dialogboksen Ny Funksjon Avbruddspunkt skriver du inn funksjonsnavnet i Funksjonsnavn-boksen.
for å begrense funksjonsspesifikasjonen:
-
Bruk fullt kvalifisert funksjonsnavn.
Eksempel:
Namespace1.ClassX.MethodA()
-
Legg til parametertypene for en overbelastet funksjon.
Eksempel:
MethodA(int, string)
-
Bruk ‘!’symbol for å angi modulen.
Eksempel:
App1.dll!MethodA
-
bruk kontekstoperatøren i innfødt C++.
{function, , }
Eksempel:
{MethodA, , App1.dll}+2
-
-
i Rullegardinmenyen Språk velger du språket for funksjonen.
-
Velg OK.
Angi et funksjonsavbruddspunkt ved hjelp av en minneadresse (bare innebygd C++)
du kan bruke adressen til et objekt til å angi et funksjonsavbruddspunkt på en metode som kalles av en bestemt forekomst av en klasse. Hvis du for eksempel får et adresserbart objekt av typen my_class
, kan du angi et funksjonsavbruddspunkt på my_method
– metoden som forekomsten kaller.
-
Angi et stoppunkt et sted etter at forekomsten av klassen er startet.
-
Finn adressen til forekomsten (for eksempel
0xcccccccc
). -
Velg Feilsøking > Nytt Stoppunkt > Funksjon Stoppunkt, eller trykk Ctrl + K, B.
-
Legg til Følgende i Funksjonsnavn-boksen, og velg C++ – språk.
((my_class *) 0xcccccccc)->my_method
Angi dataavbruddspunkter (. NET Core 3.0 eller høyere)
dataavbruddspunkter bryter kjøring når et bestemt objekts egenskap endres.
slik angir du et datapunkt
-
start feilsøking i et. NET Core-prosjekt, og vent til et avbruddspunkt er nådd.
-
i Vinduet Autos, Watch eller Locals høyreklikker du en egenskap og velger Bryt når verdien endres i hurtigmenyen.
dataavbruddspunkter i. NET Core vil ikke fungere for:
- Egenskaper som ikke kan utvides i verktøytips -, Lokalbefolknings -, Autos-eller Overvåkingsvinduet
- Statiske variabler
- Klasser Med Attributtet DebuggerTypeProxy
- Felt inne i structs
Angi dataavbruddspunkter (bare innebygd C++)
dataavbruddspunkter bryter kjøring når en verdi som er lagret på en angitt minneadresse, endres. Hvis verdien leses, men ikke endres, brytes ikke utførelsen.
slik angir du et datapunkt:
-
i Et c++ – prosjekt, start feilsøking, og vent til et stoppunkt er nådd. Velg Nytt Avbruddspunkt > Dataavbruddspunkt På Feilsøkingsmenyen.
Du kan også velge Nytt > Dataavbruddspunkt i Avbruddspunkter-vinduet eller høyreklikke på et element i Vinduet Autos, Watch eller Locals og velge Break når verdien endres i hurtigmenyen.
-
skriv inn en minneadresse eller et uttrykk som evalueres til en minneadresse i Adresse-boksen. Skriv for eksempel
&avar
for å bryte når innholdet i variabelenavar
endres. -
velg antall byte du vil at debuggeren skal se på, i Rullegardinmenyen Byteantall. Hvis du for eksempel velger 4, vil debugger se de fire byte starter på
&avar
og bryte hvis noen av disse byte endre verdi.
dataavbruddspunkter fungerer ikke under følgende forhold:
- en prosess som ikke blir feilsøkt, skriver til minneplasseringen.
- minneplasseringen deles mellom to eller flere prosesser.
- minneplasseringen oppdateres i kjernen. Hvis for eksempel minnet sendes til 32-biters Windows
ReadFile
– funksjonen, oppdateres minnet fra kjernemodus, slik at feilsøkeren ikke brytes på oppdateringen. - der klokkeuttrykket er større enn 4 byte på 32-biters maskinvare og 8 byte på 64-biters maskinvare. Dette er en begrensning av x86-arkitekturen.
Merk
-
dataavbruddspunkter avhenger av bestemte minneadresser. Adressen til en variabel endres fra en feilsøkingsøkt til den neste, slik at dataavbruddspunkter deaktiveres automatisk på slutten av hver feilsøkingsøkt.
-
hvis du angir et avbruddspunkt for data på en lokal variabel, forblir avbruddspunktet aktivert når funksjonen avsluttes, men minneadressen gjelder ikke lenger, slik at avbruddspunktet er uforutsigbar. Hvis du angir et avbruddspunkt for data på en lokal variabel, bør du slette eller deaktivere avbruddspunktet før funksjonen avsluttes.
Behandle avbruddspunkter i Avbruddspunkter-vinduet
du kan bruke Avbruddspunkter-vinduet til å se og administrere alle avbruddspunktene i løsningen. Denne sentraliserte plasseringen er spesielt nyttig i en stor løsning, eller for komplekse feilsøkingsscenarier der avbruddspunkter er kritiske.
i Avbruddspunkter-vinduet kan du søke, sortere, filtrere, aktivere/deaktivere eller slette avbruddspunkter. Du kan også angi betingelser og handlinger, eller legge til en ny funksjon eller et avbruddspunkt for data.
Hvis du vil åpne Avbruddspunkter-vinduet, velger Du Feilsøking > Windows > Avbruddspunkter, eller Trykker Ctrl+Alt+B.
hvis du vil velge kolonnene som skal vises i Avbruddspunkter-vinduet, velger Du Vis Kolonner. Velg en kolonneoverskrift for å sortere avbruddspunkter-listen etter den kolonnen.
Avbruddspunktetiketter
du kan bruke etiketter til å sortere og filtrere listen over avbruddspunkter i Avbruddspunkter-vinduet.
- hvis du vil legge til en etikett i et stoppunkt, høyreklikker du stoppunktet i kildekoden eller Stoppunkt-vinduet, og velger Deretter Rediger etiketter. Legg til en ny etikett eller velg en eksisterende, og velg DERETTER OK.
- Sorter avbruddslisten i Avbruddspunkter-vinduet ved å velge Etiketter, Betingelser eller andre kolonneoverskrifter. Du kan velge kolonnene som skal vises ved Å velge Vis Kolonner i verktøylinjen.
Eksporter og importer avbruddspunkter
hvis du vil lagre eller dele tilstanden og plasseringen til avbruddspunktene, kan du eksportere eller importere dem.
- hvis du vil eksportere et enkelt stoppunkt til EN XML-fil, høyreklikker du stoppunktet i kildekoden eller Stoppunkt-vinduet og velger Eksporter eller Eksporter valgt. Velg en eksportplassering, og velg Deretter Lagre. Standardplasseringen er løsningsmappen.
- hvis du vil eksportere flere avbruddspunkter, merker du av i Avbruddspunkter-vinduet, eller skriver inn søkekriterier i Søkefeltet. Velg Eksporter Alle avbruddspunkter som samsvarer med gjeldende søkekriterier-ikonet, og lagre filen.
- hvis du vil eksportere alle avbruddspunkter, fjerner Du merket for alle boksene og lar Søkefeltet stå tomt. Velg Eksporter Alle avbruddspunkter som samsvarer med gjeldende søkekriterier-ikonet, og lagre filen.
- hvis du vil importere avbruddspunkter, velger Du importer avbruddspunkter fra et filikon, navigerer TIL XML – filplasseringen og velger Åpne.
Angi avbruddspunkter fra feilsøkingsvinduer
Du kan også angi avbruddspunkter fra Samtalestakken og Demonterings feilsøkingsvinduene.
Angi et stoppunkt i Samtalestakkvinduet
hvis du vil bryte på instruksjonen eller linjen som en samtalefunksjon returnerer til, kan du angi et stoppunkt i Samtalestakkvinduet.
for å angi et stoppunkt i Samtalestakkvinduet:
-
for å åpne Call Stack-vinduet må du pause under feilsøking. Velg Feilsøking > Windows > Anropsstack, eller trykk Ctrl + Alt + C.
-
høyreklikk ringefunksjonen I Samtalestack-vinduet, og velg Stoppunkt > Sett Inn Stoppunkt, eller trykk F9.
et avbruddssymbol vises ved siden av funksjonsnavnet i venstre marg i anropsstakken.
avbruddspunktet for kallstakken vises i Avbruddspunkter-vinduet som en adresse, med en minneplassering som tilsvarer den neste kjørbare instruksjonen i funksjonen.
feilsøkeren bryter ved instruksjonen.
hvis du vil ha mer informasjon om anropsstakken, kan du se Slik Bruker Du Vinduet Anropsstack.
hvis du vil visuelt spore avbruddspunkter under kjøring av kode, kan du se Tilordne metoder på anropsstakken under feilsøking.
Sett et stoppunkt i Demonteringsvinduet
-
for å åpne Demonteringsvinduet må du pause under feilsøking. Velg Feilsøking > Windows > Demontering, eller trykk Ctrl + Alt + D.
-
i Demonteringsvinduet klikker du i venstre marg av instruksjonen du vil bryte på. Du kan også velge Den og trykke F9, eller høyreklikk Og velg Stoppunkt > Sett Inn Stoppunkt.
Se også
- Hva er feilsøking?
- Skriv bedre C # kode Ved Hjelp Av Visual Studio
- første titt på feilsøking
- Feilsøk avbruddspunkter i Visual Studio debugger