Självstudie: Lär dig att felsöka C#-kod med Hjälp av Visual Studio
Den här artikeln beskriver funktionerna i Visual Studio-felsökningsprogrammet i en stegvis genomgång. Om du vill ha en vy på högre nivå över felsökningsfunktionerna kan du läsa Titta först på felsökningsprogrammet. När du felsöker din appinnebär det vanligtvis att du kör applikationen med debuggern kopplad. När du gör den här uppgiften tillhandahåller felsökningsprogrammet många sätt att se vad din kod gör när den körs. Du kan gå igenom koden och titta på de värden som lagras i variabler; du kan ange övervakningar på variabler för att se när värdena ändras; du kan undersöka exekveringsvägen för koden, se om en gren av koden är i drift och så vidare. Om den här övningen är första gången du försöker felsöka kod kanske du vill läsa Felsökning för absoluta nybörjare innan du går igenom den här artikeln.
Även om demoappen är C#, gäller de flesta funktionerna för C++, Visual Basic, F#, Python, JavaScript och andra språk som stöds av Visual Studio (F# stöder inte Redigera och fortsätt. F# och JavaScript stöder inte fönstret Autos). Skärmbilderna finns i C#.
I den här handledningen kommer du att:
- Starta felsökningsprogrammet och tryck på brytpunkter.
- Lär dig kommandon för att stega igenom kod i felsökningsprogrammet
- Granska variabler i datatips och felsökningsfönster
- Granska anropsstacken
Förutsättningar
Du måste ha Visual Studio 2022 installerat och .NET-skrivbordsutveckling arbetsbelastning.
Du måste ha Visual Studio 2019 installerat och .NET Core korsplattformsutveckling arbetsyta.
Om du inte redan har installerat Visual Studio går du till Visual Studio-nedladdningar sidan för att installera den kostnadsfritt.
Om du behöver installera arbetsbelastningen men redan har Visual Studio går du till Verktyg>Hämta verktyg och funktioner..., som öppnar Installationsprogrammet för Visual Studio. Visual Studio Installer startas. Välj arbetsbelastningen .NET Core plattformoberoende utveckling och välj sedan Ändra.
Om du redan har Visual Studio men .NET-skrivbordsutveckling arbetsbelastningen inte är installerad går du till Verktyg>Hämta verktyg och funktioner..., som startar Visual Studio Installer. I Visual Studio Installationsprogrammet väljer du arbetsbelastningen .NET-skrivbordsutveckling och väljer sedan Ändra.
Skapa ett projekt
Först skapar du ett .NET Core-konsolprogramprojekt. Projekttypen levereras med alla mallfiler du behöver, innan du ens har lagt till något!
Öppna Visual Studio. Om startfönstret inte är öppet väljer du Fil>Startfönster.
I startfönstret väljer du Skapa ett nytt projekt.
I fönstret Skapa ett nytt projekt anger du konsol i sökrutan. Välj sedan C# i listan Språk och välj sedan Windows i listan Plattform.
När du har tillämpat språk- och plattformsfilter väljer du mallen Console App för .NET Core och väljer sedan Nästa.
Not
Om du inte ser mallen Console App kan du installera den från fönstret Skapa ett nytt projekt. I Hittar du inte det du letar efter? meddelande väljer du länken Installera fler verktyg och funktioner. I Visual Studio Installer väljer du sedan .NET Core plattformsoberoende utveckling arbetsbelastning.
I fönstret Konfigurera ditt nya projekt anger du GetStartedDebugging i rutan Projektnamn. Välj sedan Nästa.
Välj det rekommenderade målramverket (.NET 8.0 eller långsiktigt stöd) och välj sedan Skapa.
I fönstret Skapa ett nytt projekt anger du konsol i sökrutan. Välj sedan C# i listan Språk och välj sedan Windows i listan Plattform.
När du har tillämpat språk- och plattformsfilter väljer du mallen Console App och väljer sedan Nästa.
Not
Om du inte ser mallen Console App kan du installera den från fönstret Skapa ett nytt projekt. I Hittar du inte det du letar efter? meddelande väljer du länken Installera fler verktyg och funktioner. Välj sedan arbetsbelastningen .NET Desktop Development i Visual Studio Installer.
I fönstret Konfigurera ditt nya projekt anger du GetStartedDebugging i rutan Projektnamn. Välj sedan Nästa.
I fönstret Ytterligare information kontrollerar du att .NET 8.0 är markerat i listrutan Framework och välj sedan Skapa.
Visual Studio öppnar det nya projektet.
Skapa programmet
I Program.csersätter du all standardkod med följande kod:
using System;
class ArrayExample
{
static void Main()
{
char[] letters = { 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'};
string name = "";
int[] a = new int[10];
for (int i = 0; i < letters.Length; i++)
{
name += letters[i];
a[i] = i + 1;
SendMessage(name, a[i]);
}
Console.ReadKey();
}
static void SendMessage(string name, int msg)
{
Console.WriteLine("Hello, " + name + "! Count to " + msg);
}
}
Starta felsökningsprogrammet!
Tryck på F5 (Felsök > Starta felsökning) eller knappen Starta felsökning
i verktygsfältet För felsökning.
F5 startar appen med felsökningsprogrammet kopplat till appprocessen, men just nu har vi inte gjort något speciellt för att undersöka koden. Så appen laddas in och du ser den här konsolutdata.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10
I den här självstudien tar du en närmare titt på den här appen med hjälp av felsökningsprogrammet och tar en titt på felsökningsfunktionerna.
Stoppa felsökningsprogrammet genom att trycka på den röda stoppknappen (Skift + F5).
I konsolfönstret trycker du på en tangent för att stänga konsolfönstret.
För det mesta använder vi kortkommandon här eftersom det är ett snabbt sätt att köra felsökningskommandon. Motsvarande kommandon, till exempel verktygsfält eller menykommandon, noteras också.
Starta felsökningsprogrammet genom att välja F5eller välja knappen Felsöka mål i verktygsfältet Standard, eller välj knappen Starta felsökning i verktygsfältet Felsökning eller välj Felsök>Starta felsökning från menyraden.
F5 startar appen med felsökningsprogrammet kopplat till appprocessen. Eftersom vi inte har gjort något speciellt för att undersöka koden, körs appen till slutförande och du ser konsolens utdata.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10
Om du vill stoppa felsökningsprogrammet väljer du Skift+F5eller väljer knappen Sluta felsöka i verktygsfältet Felsök eller väljer Felsöka>Sluta felsöka från menyraden.
I konsolfönstret väljer du valfri nyckel för att stänga konsolfönstret.
Ange en brytpunkt och starta felsökningsprogrammet
I
for
-loopen för funktionenMain
anger du en brytpunkt genom att klicka på vänstermarginalen på följande kodrad:name += letters[i];
En röd cirkel
visas där du anger brytpunkten.
Brytpunkter är en av de mest grundläggande och viktigaste funktionerna i tillförlitlig felsökning. En brytpunkt anger var Visual Studio ska pausa den kod som körs så att du kan ta en titt på värdena för variabler eller minnesbeteendet, eller om en kodgren körs eller inte.
Tryck på F5 eller knappen Starta felsökning.
Appen startar och felsökningsprogrammet körs till den kodrad där du anger brytpunkten.
Den gula pilen representerar instruktionen där felsökningsprogrammet pausade, vilket också pausar appkörningen vid samma tidpunkt (den här instruktionen har ännu inte körts).
Om appen inte körs ännu startar F5 felsökningsprogrammet och stoppar vid den första brytpunkten. Annars fortsätter F5- att köra appen till nästa brytpunkt.
Brytpunkter är en användbar funktion när du känner till kodraden eller det kodavsnitt som du vill undersöka i detalj. Information om olika typer av brytpunkter som du kan ange, till exempel villkorliga brytpunkter, finns i Använda brytpunkter.
I
for
-loopen för funktionenMain
anger du en brytpunkt genom att klicka på vänstermarginalen på följande kodrad:name += letters[i];
En röd cirkel visas där du anger brytpunkten.
Brytpunkter är en viktig funktion i tillförlitlig felsökning. Du kan ange brytpunkter där du vill att Visual Studio ska pausa koden som körs så att du kan titta på värdena för variabler eller minnesbeteendet, eller veta om en kodgren körs eller inte.
Börja felsöka genom att välja F5, eller välj knappen Felsöka mål i verktygsfältet Standard, eller välj knappen Starta felsökning i verktygsfältet Felsök eller välj Felsök>Starta felsökning från menyraden. Appen startar och felsökningsprogrammet körs till den kodrad där du anger brytpunkten.
Den gula pilen pekar på instruktionen där felsökningsprogrammet pausades. Appens körning pausas vid samma tidpunkt och instruktionen har ännu inte utförts.
När appen inte körs startar F5 felsökningsprogrammet, som kör appen tills den når den första brytpunkten. Om appen pausas vid en brytpunkt fortsätter F5- att köra appen tills den når nästa brytpunkt.
Brytpunkter är en användbar funktion när du känner till den rad eller det kodavsnitt som du vill granska i detalj. Mer information om de olika typerna av brytpunkter som du kan ange, till exempel villkorliga brytpunkter, finns i Använda brytpunkter.
Navigera i kod och inspektera data med hjälp av datatips
För det mesta använder vi kortkommandona här eftersom det är ett bra sätt att snabbt köra appen i felsökningsprogrammet (motsvarande kommandon som menykommandon visas inom parentes).
Medan kodkörningen pausas på
name += letters[i]
-instruktionen hovra över variabelnletters
och du ser dess standardvärde, värdet för det första elementet i matrisenchar[10]
.Funktioner som gör att du kan inspektera variabler är en av de mest användbara funktionerna i felsökningsprogrammet, och det finns olika sätt att göra det på. När du försöker felsöka ett problem försöker du ofta ta reda på om variabler lagrar de värden som du förväntar dig att de ska ha vid en viss tidpunkt.
Expandera variabeln
letters
för att se dess egenskaper, som innehåller alla element som variabeln innehåller.Hovra sedan över variabeln
name
och du ser dess aktuella värde, en tom sträng.Tryck på F10 (eller välj Felsök > Steg över) två gånger för att gå vidare till
SendMessage
-metodanropet och tryck sedan på F10 en gång till.F10 avancerar felsökningsprogrammet till nästa instruktion utan att gå in på funktioner eller metoder i appkoden (koden körs fortfarande). Genom att trycka på F10 på
SendMessage
-metodanropet hoppade vi över implementeringskoden förSendMessage
(som vi kanske inte är intresserade av just nu).Tryck på F10 (eller Felsök>Steg över) några gånger för att iterera flera gånger genom
for
-loopen, pausa igen vid brytpunkten och hovra övername
variabeln varje gång för att kontrollera dess värde.Värdet för variabeln ändras med varje iteration av
for
-loopen, som visar värden förf
, sedanfr
, sedanfre
och så vidare. Om du vill påskynda felsökningen genom loopen snabbare i det här scenariot kan du trycka på F5- (eller välja Felsöka>Fortsätt) i stället, vilket för dig vidare till brytpunkten i stället för nästa instruktion.När du felsöker vill du ofta ha ett snabbt sätt att kontrollera egenskapsvärden för variabler, för att se om de lagrar de värden som du förväntar dig att de ska lagra, och datatipsen är ett bra sätt att göra det på.
Medan kodkörningen förblir pausad i
for
-loopen i metodenMain
trycker du på F11 (eller väljer Felsök > Steg in i) tills du pausar vidSendMessage
-metodanropet.Du bör vara på den här kodraden:
SendMessage(name, a[i]);
Tryck på F11 en gång till för att gå in på metoden
SendMessage
.Den gula pekaren avancerar till metoden
SendMessage
.F11 är kommandot Step Into och avancerar appkörningen en instruktion i taget. F11 är ett bra sätt att undersöka körningsflödet i största detalj. Som förval hoppar debuggern över icke-användarkod (om du vill ha mer information se Just My Code).
Anta att du är klar med att undersöka metoden
SendMessage
och att du vill komma ur metoden men stanna kvar i felsökningsprogrammet. Du kan göra detta med hjälp av kommandot Step Out.Tryck på Shift + F11 (eller Felsök > Step Out).
Det här kommandot återupptar appkörningen (och avancerar felsökningsprogrammet) tills den aktuella metoden eller funktionen returnerar.
Du bör vara tillbaka i
for
-loopen iMain
-metoden, pausad vidSendMessage
-metodanropet. Mer information om olika sätt att gå igenom koden finns i Navigera kod i felsökningsprogrammet.
När kodkörningen är pausad vid
name += letters[i]
-satsen, håll muspekaren över variabelnletters
, för att se ett datatips som visar matrisens storlek och elementtypchar[10]
.Anteckning
En av de mest användbara funktionerna i felsökningsprogrammet är dess möjlighet att inspektera en variabel. När du försöker felsöka ett problem försöker du ofta ta reda på om variabler har värden som du förväntar dig vid en viss tidpunkt. Att visa informationstips är ett bra sätt att säkerställa det.
Expandera variabeln
letters
för att visa alla dess matriselement och deras värden.Hovra över variabeln
name
för att se dess aktuella värde, som är en tom sträng.Om du vill gå vidare med felsökningsprogrammet till nästa instruktion väljer du F10eller väljer knappen Steg över i verktygsfältet Felsök eller väljer Felsöka>Steg över i menyraden. Välj F10 två gånger till för att gå förbi
SendMessage
-metodanropet.F10 avancerar felsökningsprogrammet utan att gå in i funktion eller metoder, även om koden fortfarande körs. På så sätt hoppades vi över att felsöka koden i metoden
SendMessage
, som vi inte är intresserade av just nu.Om du vill iterera genom
for
-loopen några gånger väljer du F10 upprepade gånger. Under varje loop-iteration pausar du vid brytpunkten och hovra sedan över variabelnname
för att kontrollera dess värde i datatipset.Värdet för variabeln ändras med varje iteration av
for
-loopen, som visar värden förf
, sedanfr
, sedanfre
och så vidare. Om du vill avancera felsökningsprogrammet snabbare genom loopen väljer du F5- i stället, som går vidare till brytpunkten i stället för nästa instruktion.Medan kodkörningen pausas i
for
-loopen förMain
-metoden väljer du F11eller väljer knappen Steg till i verktygsfältet Felsökning eller väljer Felsöka>Steg in i från menyraden tills du nårSendMessage
-metodanropet.Felsökningsprogrammet bör pausas på den här kodraden:
SendMessage(name, a[i]);
Om du vill gå in på metoden
SendMessage
väljer du F11 igen.Den gula pekaren avancerar till metoden
SendMessage
.F11 hjälper dig att undersöka körningsflödet för din kod mer ingående. Om du vill gå in på en metod från ett metodanrop väljer du F11. Som standard hoppar felsökningsprogrammet över steg till metoder som inte är använda. För att lära dig mer om att felsöka kod som inte är användarkod, se Just My Code.
När du har felsökt
SendMessage
-metoden är du redo att återgå tillfor
-loopen för metodenmain
.Om du vill lämna metoden
SendMessage
väljer du Skift+F11eller väljer knappen Steg ut i verktygsfältet Felsök eller väljer Felsöka>Steg ut från menyraden.Step Out återupptar appkörningen och avancerar felsökningsprogrammet tills den aktuella metoden eller funktionen returneras.
Du ser att den gula pekaren är tillbaka i
for
-loopen iMain
-metoden, pausad vidSendMessage
-metodanropet. Mer information om olika sätt att gå igenom koden finns i Navigera kod i felsökningsprogrammet.
Navigera kod med Kör för att klicka
Välj F5 för att gå vidare till brytpunkten igen.
Rulla nedåt i kodredigeraren och hovra över metoden
Console.WriteLine
i metodenSendMessage
tills den gröna Kör för att klicka på-knappenvisas. Knappbeskrivningen för knappen visar "Kör körning till här".
Obs
Knappen Kör för att klicka på är ny i Visual Studio 2017. (Om du inte ser den gröna pilknappen använder du F11 i det här exemplet i stället för att flytta felsökningsprogrammet till rätt plats.)
Välj knappen Kör för att klicka på.
Felsökningsprogrammet avancerar till metoden
Console.WriteLine
.Att använda den här knappen liknar att ange en tillfällig brytpunkt. Kör för att klicka är praktiskt för att snabbt komma runt inom en synlig region med appkod (du kan välja i valfri öppen fil).
Välj F5 för att gå vidare till brytpunkten igen.
Hovra över
Console.WriteLine
-metodanropet iSendMessage
-metoden i kodredigeraren tills knappen Kör för att klicka på visas. Knappens beskrivning visar "Kör processen hit."Välj knappen Kör för att klicka på. Alternativt, med markören på uttrycket
Console.WriteLine
, välj Ctrl+F10. Du kan också högerklicka påConsole.WriteLine
-metodanropet och välja Kör till markör från sammanhangsmenyn.Felsökningsprogrammet går vidare till
Console.WriteLine
-metodanropet.Att använda knappen Kör för att klicka på liknar att ange en tillfällig brytpunkt och är praktiskt för att snabbt komma runt inom en synlig region i din appkod i en öppen fil.
Starta om appen snabbt
Välj knappen Starta om i Felsökningsverktygsfältet (Ctrl + Skift + F5).
När du trycker på Starta omsparar den tid jämfört med att stoppa appen och starta om felsökningsprogrammet. Felsökningsprogrammet pausar vid den första brytpunkten som träffas genom att köra kod.
Felsökningsprogrammet stoppas igen vid den brytpunkt som du tidigare angav i for
-loopen.
Om du vill köra appen igen från början i felsökningsprogrammet väljer du Ctrl+Skift+F5eller väljer knappen Starta om i verktygsfältet Felsöka eller väljer Felsök>Starta om från menyraden.
Starta om stoppar felsökningsprogrammet och startar sedan om det i ett steg. När felsökningsprogrammet startas om körs den till den första brytpunkten, som är den brytpunkt som du tidigare angav i for
-loopen, och pausa sedan.
Granska variabler med fönstren Autos och Lokala
Titta på fönstret Autos längst ned i kodredigeraren.
Om den är stängd öppnar du den medan den pausas i felsökningsprogrammet genom att välja Felsöka>Windows>Autos.
I fönstret Autos visas variabler och deras aktuella värde. Fönstret Autos visar alla variabler som används på den aktuella raden eller föregående rad (Kontrollera dokumentationen för språkspecifikt beteende).
Titta sedan på fönstret Locals på en flik bredvid fönstret Autos.
Expandera variabeln
letters
för att visa de element som den innehåller.Fönstret Locals visar de variabler som finns i det aktuella omfånget, det vill säga den aktuella körningskontexten.
Windows Autos och Locals visar variabelvärden när du felsöker. Fönstren är endast tillgängliga under en felsökningssession. Fönstret Autos visar variabler som används på den aktuella raden som felsökningsprogrammet finns på och på föregående rad. Fönstret Locals visar variabler som definierats i det lokala omfånget, vilket vanligtvis är den aktuella funktionen eller metoden.
När felsökningsprogrammet är pausat visar du fönstret Autos längst ned i kodredigeraren.
Om fönstret Autos är stängt väljer du Ctrl+D, Aeller väljer Felsöka>Windows>Autos från menyraden.
När felsökningsprogrammet fortfarande är pausat visar du fönstret Locals på en flik bredvid fönstret Autos.
Om fönstret Locals är stängt väljer du Ctrl+D, Leller väljer Felsöka>Windows>Locals.
I fönstret Locals expanderar du variabeln
letters
för att se dess matriselement och deras värden.
Mer information om fönstren Autos och Locals finns i Granska variabler i fönstren Autos och Locals.
Ställ in en klocka
Högerklicka på variabeln name
i huvudkodredigeraren och välj Lägg till bevakning.
Fönstret Watch öppnas längst ned i kodredigeraren. Du kan använda ett Watch-fönster för att ange en variabel (eller ett uttryck) som du vill hålla ett öga på.
Nu har du en klocka inställd på variabeln name
och du kan se dess värde ändras när du går igenom felsökningsprogrammet. Till skillnad från de andra variabelfönstren visar fönstret Watch alltid de variabler som du tittar på (de är nedtonade när de är utanför omfånget).
Du kan ange en variabel eller ett uttryck som du vill hålla ett öga på när du går igenom kod genom att lägga till den i fönstret Watch.
När felsökningsprogrammet har pausats högerklickar du på variabeln
name
och väljer Lägg till klocka.Fönstret Watch öppnas som standard längst ned i kodredigeraren.
Nu när du har angett en klocka för variabeln
name
går du igenom koden för att se värdet förname
variabeländring med varjefor
loop-iteration.Till skillnad från de andra variabelfönstren visar fönstret Watch alltid de variabler som du tittar på. Variabler som ligger utanför omfånget visas som otillgängliga.
För mer information om övervakningsfönstret , se övervaka variabler med övervakningsfönster.
Granska anropsstacken
Medan kodkörningen pausas i
for
-loopen väljer du fönstret Anropsstack, som är öppet som standard i den nedre högra rutan.Om det är stängt öppnar du det medan det är pausat i felsökningsprogrammet genom att välja Felsöka>Windows>Anropsstapel.
Välj F11 några gånger tills felsökningsprogrammet pausas i metoden
SendMessage
. Titta på Call Stack-fönstret .Fönstret Call Stack visar i vilken ordning metoder och funktioner anropas. Den översta raden visar den aktuella funktionen (metoden
SendMessage
i den här appen). Den andra raden visar attSendMessage
anropades från metodenMain
och så vidare.Not
Fönstret Call Stack liknar felsökningsperspektivet i vissa IDE:er som Eclipse.
Anropsstacken är ett bra sätt att undersöka och förstå körningsflödet för en app.
Du kan dubbelklicka på en kodrad för att titta på källkoden, som också ändrar det aktuella omfånget under granskning av felsökningsprogrammet. Den här åtgärden avancerar inte felsökningsprogrammet.
Du kan också använda högerklicksmenyer från fönstret Anropsstack för att utföra andra uppgifter. Du kan till exempel infoga brytpunkter i angivna funktioner, avancera felsökningsprogrammet med hjälp av Kör till marköroch gå igenom källkoden. Mer information finns i How to: Examine the Call Stack.
Anropsstacken kan hjälpa dig att förstå körningsflödet för din app genom att visa i vilken ordning metoder och funktioner anropas.
När felsökningsprogrammet har pausats i
for
-loopen, visar du fönstret Anropsstack, som öppnas som standard i den nedre högra rutan i kodredigeraren.Om fönstret Anropsstack är stängt väljer du Ctrl+D, C, eller väljer Debugga>Windows>Anropsstack från menyraden.
I fönstret Stackanrop visas den gula pekaren på den aktuella metoden
Main
.Välj F11 några gånger tills felsökningsprogrammet pausas i metoden
SendMessage
.Den översta raden i fönstret Call Stack visar den aktuella funktionen, som är metoden
SendMessage
. Den andra raden visar att metodenSendMessage
anropades från metodenMain
.Not
Fönstret Call Stack liknar felsökningsperspektivet i vissa IDE:er, till exempel Eclipse.
I fönstret Anropsstack kan du dubbelklicka på en kodrad för att gå till källkoden, vilket ändrar det aktuella omfånget som inspekteras av felsökaren. Den här åtgärden avancerar inte felsökningsprogrammet.
Du kan också använda högerklicksmenyer i fönstret anropsstack för att göra andra saker. Du kan till exempel infoga brytpunkter i angivna funktioner, avancera felsökningsprogrammet med hjälp av Kör till marköreller gå till källkod.
Mer information om Call Stackfinns i How to: Examine the Call Stack.
Nästa steg
I den här självstudien har du lärt dig hur du startar felsökningsprogrammet, går igenom kod och inspekterar variabler. Du kanske vill titta på felsökningsfunktioner på hög nivå tillsammans med länkar till mer information.