brug breakpoints i Visual Studio debugger

  • 06/30/2020
  • 12 minutter at læse
    • M
    • g
    • j
    • v
    • g
    • +8

Breakpoints er en af de vigtigste fejlfindingsteknikker i din udviklers værktøjskasse. Du indstiller breakpoints, uanset hvor du vil sætte debugger-udførelse på pause. For eksempel kan du se tilstanden af kodevariabler eller se på opkaldsstakken ved et bestemt breakpoint. Hvis du forsøger at løse en advarsel eller et problem, mens du bruger breakpoints, skal du se Fejlfinding breakpoints i Visual Studio debugger.

Bemærk

hvis du kender den opgave eller det problem, du prøver at løse, men du har brug for at vide, hvilken slags breakpoint du skal bruge, se Ofte stillede spørgsmål – Find din fejlretningsfunktion.

Indstil breakpoints i kildekode

du kan indstille et breakpoint på en hvilken som helst linje med eksekverbar kode. For eksempel kan du i den følgende C# – kode indstille et breakpoint på kodelinjen med variabeltildelingen (int testInt = 1), for – sløjfen eller en hvilken som helst kode inde i for – sløjfen. Du kan ikke indstille et breakpoint på metodesignaturer, erklæringer for et navneområde eller en klasse eller variable erklæringer, hvis der ikke er nogen tildeling og ingen getter/setter.

hvis du vil angive et breakpoint i kildekoden, skal du klikke længst til venstre ved siden af en kodelinje. Du kan også vælge linjen og trykke på F9, vælge Debug > Toggle Breakpoint, eller højreklik og vælg Breakpoint > Indsæt breakpoint. Breakpoint vises som en rød prik i venstre margen.

for de fleste sprog, herunder C#, fremhæves breakpoint og aktuelle eksekveringslinjer automatisk. For C++ – kode kan du aktivere fremhævning af breakpoint og aktuelle linjer ved at vælge Værktøjer (eller Debug) > indstillinger > Debugging > Fremhæv hele kildelinjen for breakpoints og aktuel sætning (kun C++).

Indstil et breakpoint

når du debugger, stopper udførelsen ved breakpoint, før koden på den linje udføres. Breakpoint-symbolet viser en gul pil.

ved brudpunktet i det følgende eksempel er værdien af testInt stadig 1. Så værdien er ikke ændret, siden variablen blev initialiseret (indstillet til en værdi på 1), fordi udsagnet i gult endnu ikke er udført.

Breakpoint-udførelse stoppet

når debuggeren stopper ved breakpoint, kan du se på appens aktuelle tilstand, inklusive variable værdier og opkaldsstakken.

her er et par generelle instruktioner til at arbejde med breakpoints.

  • breakpoint er en toggle. Du kan klikke på den, trykke på F9 eller bruge Debug > Toggle Breakpoint for at slette eller genindsætte den.

  • hvis du vil deaktivere et breakpoint uden at slette det, skal du holde markøren over eller højreklikke på det og vælge Deaktiver breakpoint. Deaktiverede breakpoints vises som tomme prikker i venstre margen eller Breakpoints-vinduet. Hvis du vil genaktivere et breakpoint, skal du holde markøren over eller højreklikke på det og vælge Aktiver breakpoint.

  • Angiv betingelser og handlinger, Tilføj og rediger etiketter, eller Eksporter et breakpoint ved at højreklikke på det og vælge den relevante kommando eller svæve over det og vælge ikonet Indstillinger.

Breakpoint-handlinger og tracepoints

et tracepoint er et breakpoint, der udskriver en meddelelse til Outputvinduet. Et tracepoint kan fungere som en midlertidig sporingserklæring på programmeringssproget og stopper ikke udførelsen af kode. Du opretter et tracepoint ved at indstille en særlig handling i vinduet Breakpoint Settings. For detaljerede instruktioner, se Brug tracepoints i Visual Studio debugger.

Breakpoint betingelser

du kan styre, hvornår og hvor et breakpoint udføres ved at indstille betingelser. Betingelsen kan være ethvert gyldigt udtryk, som debuggeren genkender. Du kan finde flere oplysninger om gyldige udtryk under udtryk i debuggeren.

for at indstille en breakpoint-tilstand:

  1. Højreklik på breakpoint-symbolet, og vælg betingelser (eller tryk på Alt + F9, C). Eller hold markøren over breakpoint-symbolet, vælg ikonet Indstillinger, og vælg derefter betingelser i vinduet Breakpoint-indstillinger.

    du kan også indstille betingelser i vinduet Breakpoints ved at højreklikke på et breakpoint og vælge Indstillinger og derefter vælge betingelser.

     Breakpoint-indstillinger

  2. i rullemenuen skal du vælge betinget udtryk, Hittælling eller Filter og indstille værdien i overensstemmelse hermed.

  3. vælg Luk, eller tryk på Ctrl+Enter for at lukke vinduet Breakpoint-indstillinger. Eller vælg OK i vinduet Breakpoints for at lukke dialogen.

Breakpoints med indstillede betingelser vises med et + symbol i vinduerne kildekode og Breakpoints.

Opret et betinget udtryk

når du vælger betinget udtryk, kan du vælge mellem to betingelser: er sandt, eller når det ændres. Vælg er sandt at bryde, når udtrykket er opfyldt, eller når det ændres til at bryde, når værdien af udtrykket er ændret.

i det følgende eksempel rammes breakpoint kun, når værdien af testInt er 4:

Breakpoint-tilstand er sand

i det følgende eksempel rammes breakpoint kun, når værdien af testInt ændres:

Breakpoint når ændret

hvis du angiver en breakpoint betingelse med ugyldig syntaks, vises en advarsel. Hvis du angiver en breakpoint-betingelse med gyldig syntaks, men ugyldig semantik, vises en advarselsmeddelelse første gang breakpoint rammes. I begge tilfælde bryder debuggeren, når den rammer det ugyldige breakpoint. Breakpoint springes kun over, hvis betingelsen er gyldig og evalueres til false.

Bemærk

for feltet hvornår ændret betragter debuggeren ikke den første evaluering af tilstanden som en ændring, så rammer ikke breakpoint på den første evaluering.

brug objekt-id ‘ er i betingede udtryk (kun C# og F#)

der er tidspunkter, hvor du vil observere opførelsen af et bestemt objekt. For eksempel vil du måske finde ud af, hvorfor et objekt blev indsat i en samling mere end en gang. I C# og F# kan du oprette objekt-id ‘ er til bestemte forekomster af referencetyper og bruge dem under breakpoint-forhold. Objekt-ID ‘ et genereres af common language runtime (CLR) debugging services og er forbundet med objektet.

for at oprette et objekt-ID:

  1. Indstil et breakpoint i koden et sted, efter at objektet er oprettet.

  2. start debugging, og når udførelsen stopper ved breakpoint, skal du vælge Debug > vinduer > Locals (eller trykke på Ctrl + Alt + V, L) for at åbne vinduet Locals.

    Find den specifikke objektforekomst i vinduet Locals, Højreklik på den, og vælg lav objekt-ID.

    du skal se et $ plus et nummer i Lokalvinduet. Dette er objekt-ID ‘ et.

  3. Tilføj et nyt breakpoint på det punkt, du vil undersøge; for eksempel når objektet skal føjes til samlingen. Højreklik på breakpoint og vælg betingelser.

  4. brug objekt-ID ‘ et i feltet betinget udtryk. Hvis variablen item f.eks. er det objekt, der skal føjes til samlingen, skal du vælge er sand og skrive element == $<n>, hvor <n> er objektets ID-nummer.

    udførelse vil bryde på det tidspunkt, hvor objektet skal føjes til samlingen.

    hvis du vil slette objekt-ID ‘ et, skal du højreklikke på variablen i vinduet Locals og vælge Slet objekt-ID.

Bemærk

objekt-id ‘ er opretter svage referencer og forhindrer ikke, at objektet indsamles affald. De er kun gyldige for den aktuelle debugging session.

Indstil en hittællingstilstand

hvis du har mistanke om, at en løkke i din kode begynder at opføre sig forkert efter et vist antal iterationer, kan du indstille et breakpoint for at stoppe udførelsen efter det antal hits i stedet for gentagne gange at trykke på F5 for at nå den iteration.

under betingelser i vinduet Indstillinger for Breakpoint skal du vælge Hit Count og derefter angive antallet af gentagelser. I det følgende eksempel er breakpoint indstillet til at ramme på hver anden iteration:

Breakpoint hit count

Indstil en filterbetingelse

du kan begrænse et breakpoint til kun at skyde på specificerede enheder eller i specificerede processer og tråde.

under betingelser i vinduet Breakpoint-Indstillinger skal du vælge Filter og derefter indtaste et eller flere af følgende udtryk:

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

Vedlæg strengværdier i dobbelt anførselstegn. Du kan kombinere klausuler ved hjælp af & (og), || (eller), ! (ikke) og parenteser.

Indstil funktion breakpoints

du kan afbryde udførelsen, når en funktion kaldes. Dette er nyttigt, for eksempel når du kender funktionsnavnet, men ikke dets placering. Det er også nyttigt, hvis du har funktioner med samme navn, og du vil bryde på dem alle (såsom overbelastede funktioner eller funktioner i forskellige projekter).

for at indstille en funktion breakpoint:

  1. Vælg Debug > nyt Breakpoint > funktion Breakpoint, eller tryk på Ctrl + K, B.

    du kan også vælge Nyt > funktion Breakpoint i vinduet Breakpoints.

  2. i dialogboksen Ny funktion Breakpoint skal du indtaste funktionsnavnet i feltet Funktionsnavn.

    for at indsnævre funktionsspecifikationen:

    • brug det fuldt kvalificerede funktionsnavn.

      eksempel: Namespace1.ClassX.MethodA()

    • Tilføj parametertyperne for en overbelastet funktion.

      eksempel: MethodA(int, string)

    • brug’!’symbol for at angive modulet.

      eksempel: App1.dll!MethodA

    • brug kontekstoperatoren i native C++.

      {function, , }

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

  3. Vælg sprog for funktionen i rullemenuen Sprog.

  4. vælg OK.

Indstil et funktionsstop ved hjælp af en hukommelsesadresse (kun native C++)

du kan bruge adressen på et objekt til at indstille et funktionsstoppunkt på en metode, der kaldes af en bestemt forekomst af en klasse. Hvis du f.eks. får et adresserbart objekt af typen my_class, kan du indstille et funktionsstoppunkt på den my_method – metode, som instansen kalder.

  1. Indstil et breakpoint et sted efter forekomsten af klassen er instantieret.

  2. Find adressen på forekomsten (for eksempel 0xcccccccc).

  3. Vælg Debug > nyt Breakpoint > funktion Breakpoint, eller tryk på Ctrl + K, B.

  4. Føj følgende til feltet Funktionsnavn, og vælg C++ sprog.

    ((my_class *) 0xcccccccc)->my_method

Indstil data breakpoints (. net Core 3.0 eller højere)

data breakpoints bryder udførelsen, når et bestemt objekts egenskab ændres.

for at indstille et data breakpoint

  1. i et. net-Kerneprojekt skal du starte fejlfinding og vente, indtil et breakpoint er nået.

  2. Højreklik på en egenskab i vinduet Autos, ur eller Locals, og vælg Break, når værdien ændres i genvejsmenuen.

     administreret data Breakpoint

data breakpoints i. net Core vil ikke arbejde for:

  • egenskaber, der ikke kan udvides i vinduet tooltip, Locals, Autos eller se
  • statiske variabler
  • klasser med attributten Debuggertypeproksy
  • felter inde i strukturer

Indstil data breakpoints (kun native C++)

data breakpoints bryder udførelsen, når en værdi, der er gemt på en bestemt hukommelsesadresse, ændres. Hvis værdien læses, men ikke ændres, går udførelsen ikke i stykker.

for at indstille et data breakpoint:

  1. i et C++ – projekt skal du starte fejlfinding og vente, indtil et breakpoint er nået. I menuen Debug skal du vælge Nyt Breakpoint > data Breakpoint.

    du kan også vælge Nyt > data Breakpoint i Breakpoints-vinduet eller højreklikke på et element i vinduet Autos, ur eller Locals og vælge Break, når værdien ændres i genvejsmenuen.

  2. Skriv en hukommelsesadresse eller et udtryk, der evalueres til en hukommelsesadresse i feltet Adresse. Skriv for eksempel &avar for at bryde, når indholdet af variablen avar ændres.

  3. i rullemenuen Byteantal skal du vælge det antal bytes, du vil have debuggeren til at se. Hvis du for eksempel vælger 4, vil debuggeren se de fire bytes, der starter ved &avar og bryde, hvis nogen af disse bytes ændrer værdi.

data breakpoints fungerer ikke under følgende betingelser:

  • en proces, der ikke debugges, skriver til hukommelsesplaceringen.
  • hukommelsesplaceringen deles mellem to eller flere processer.
  • hukommelsesplaceringen opdateres i kernen. Sendes til 32-bit vinduer ReadFile – funktionen, opdateres hukommelsen fra kernetilstand, så debuggeren ikke går i stykker ved opdateringen.
  • hvor urudtrykket er større end 4 bytes på 32-bit udstyr og 8 bytes på 64-bit udstyr. Dette er en begrænsning af H86-arkitekturen.

Bemærk

  • data breakpoints afhænger af specifikke hukommelsesadresser. Adressen på en variabel ændres fra en debugging session til den næste, så data breakpoints deaktiveres automatisk i slutningen af hver debugging session.

  • hvis du angiver et data breakpoint på en lokal variabel, forbliver breakpoint aktiveret, når funktionen slutter, men hukommelsesadressen er ikke længere anvendelig, så breakpoints opførsel er uforudsigelig. Hvis du angiver et data breakpoint på en lokal variabel, skal du slette eller deaktivere breakpoint, før funktionen slutter.

Administrer breakpoints i Breakpoints-vinduet

kan du bruge Breakpoints-vinduet til at se og administrere alle breakpoints i din løsning. Denne centraliserede placering er især nyttig i en stor løsning eller til komplekse fejlfindingsscenarier, hvor breakpoints er kritiske.

i vinduet Breakpoints kan du søge, sortere, filtrere, aktivere/deaktivere eller slette breakpoints. Du kan også indstille betingelser og handlinger, eller tilføje en ny funktion eller data breakpoint.

for at åbne Breakpoints-vinduet skal du vælge Debug > vinduer > Breakpoints eller trykke på Ctrl+Alt+B.

Breakpoints-vinduet

for at vælge de kolonner, der skal vises i Breakpoints-vinduet, skal du vælge Vis kolonner. Vælg en kolonneoverskrift for at sortere breakpoints-listen efter den kolonne.

Breakpoint-etiketter

du kan bruge etiketter til at sortere og filtrere listen over breakpoints i Breakpoints-vinduet.

  1. hvis du vil føje en etiket til et breakpoint, skal du højreklikke på breakpoint i kildekoden eller Breakpoints-vinduet og derefter vælge Rediger etiketter. Tilføj en ny etiket, eller vælg en eksisterende, og vælg derefter OK.
  2. Sorter breakpoint-listen i Breakpoints-vinduet ved at vælge etiketter, betingelser eller andre kolonneoverskrifter. Du kan vælge de kolonner, der skal vises, ved at vælge Vis kolonner på værktøjslinjen.

Eksporter og importer breakpoints

hvis du vil gemme eller dele tilstanden og placeringen af dine breakpoints, kan du eksportere eller importere dem.

  • hvis du vil eksportere et enkelt breakpoint til en fil, skal du højreklikke på breakpoint i vinduet kildekode eller Breakpoints og vælge Eksporter eller Eksporter valgt. Vælg en eksportplacering, og vælg derefter Gem. Standardplaceringen er løsningsmappen.
  • hvis du vil eksportere flere breakpoints, skal du i vinduet Breakpoints markere felterne ud for breakpoints eller indtaste søgekriterier i søgefeltet. Vælg Eksporter alle breakpoints, der matcher ikonet aktuelle søgekriterier, og gem filen.
  • hvis du vil eksportere alle breakpoints, skal du fravælge alle felter og lade søgefeltet være tomt. Vælg Eksporter alle breakpoints, der matcher ikonet aktuelle søgekriterier, og gem filen.
  • hvis du vil importere breakpoints, skal du i vinduet Breakpoints vælge Import breakpoints fra et filikon, navigere til placeringen af filen og vælge Åbn.

Indstil breakpoints fra debugger vinduer

du kan også indstille breakpoints fra Opkaldsstakken og demontering debugger vinduer.

Indstil et breakpoint i vinduet Call Stack

hvis du vil bryde ved den instruktion eller linje, som en opkaldsfunktion vender tilbage til, kan du indstille et breakpoint i vinduet Call Stack.

Sådan indstilles et breakpoint i vinduet Call Stack:

  1. for at åbne vinduet Call Stack skal du være sat på pause under fejlfinding. Vælg Debug > vinduer > Opkaldsstak, eller tryk på Ctrl + Alt + C.

  2. Højreklik på opkaldsfunktionen i vinduet Opkaldsstak, og vælg Breakpoint > Indsæt Breakpoint, eller tryk på F9.

    et breakpoint-symbol vises ved siden af funktionen opkaldsnavn i venstre margen på opkaldsstakken.

breakpoint for opkaldsstak vises i Breakpoints-vinduet som en adresse med en hukommelsesplacering, der svarer til den næste eksekverbare instruktion i funktionen.

debuggeren bryder ved instruktionen.

du kan finde flere oplysninger om opkaldsstakken under fremgangsmåde: brug vinduet Opkaldsstak.

for visuelt at spore breakpoints under kodekørsel, se Kortmetoder på opkaldsstakken under fejlfinding.

Indstil et breakpoint i Demonteringsvinduet

  1. for at åbne Demonteringsvinduet skal du blive sat på pause under fejlfinding. Vælg Debug > vinduer > demontering, eller tryk på Ctrl+Alt+D.

  2. i Demonteringsvinduet skal du klikke i venstre margen på den instruktion, du vil bryde ved. Du kan også vælge det og trykke på F9 eller højreklikke og vælge Breakpoint > Indsæt Breakpoint.

Se også

  • Hvad er debugging?
  • Skriv bedre C# kode ved hjælp af Visual Studio
  • første kig på debugging
  • fejlfinding breakpoints i Visual Studio debugger

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.