Felsöka Python-koden i Visual Studio
Visual Studio ger en omfattande felsökningsupplevelse för Python. I den här artikeln utforskar du hur du kopplar felsökningsprogrammet till processer som körs och utvärderar uttryck i fönstren Watch och Immediate. I felsökningsprogrammet kan du inspektera lokala variabler, använda brytpunkter, stega in/ut/över-instruktioner, Ange nästa instruktionmed mera.
Information om scenariospecifik felsökning finns i följande artiklar:
Förutsättningar
Visual Studio installerat med stöd för Python-arbetsbelastningar. Mer information finns i Installera Python-stöd i Visual Studio.
Python-kod som ska användas med felsökningsprogrammet.
Felsöka kod med eller utan projekt
Om du vill styra Python-miljön och argumenten skapar du först ett projekt för koden. Du kan skapa ett projekt med projektmallen Från befintlig Python-kod. Mer information finns i Skapa ett projekt från befintliga Python-kodfiler.
Du behöver dock inte någon projekt- eller lösningsfil i Visual Studio för att felsöka Python-koden. Om du vill felsöka kod i en fristående Python-fil öppnar du filen i Visual Studio och väljer Felsöka>Starta felsökning. Visual Studio startar skriptet med den globala standardmiljön och inga argument. Du har sedan fullständigt felsökningsstöd för din kod. Mer information finns i Python-miljöer.
Utforska grundläggande felsökning
Det grundläggande arbetsflödet för felsökning omfattar att ställa in brytpunkter, stega igenom kod, granska värden och hantera undantag. Du kan starta en felsökningssession genom att välja Felsöka>Starta felsökning eller använda kortkommandot F5. För ett projekt startar dessa åtgärder startfil med projektets aktiva miljö och eventuella kommandoradsargument eller sökvägar som angetts för Project Properties. Information om hur du konfigurerar egenskaperna finns i Ange alternativ för felsökning av projekt.
Ange startfilen för projektet
Startfilen för ett projekt visas i fetstil i Solution Explorer. Du kan välja vilken fil som ska användas som startfil.
- Om du vill ange en projektfil som startfil högerklickar du på filen och väljer Ange som startobjekt.
I Visual Studio 2017 version 15.6 och senare visas en avisering om du inte har en angiven startfiluppsättning. Tidigare versioner av Visual Studio kan öppna ett utdatafönster med Python-tolken igång, eller så öppnas och stängs fönstret Output kort.
Ange den aktiva miljön
Om du använder en projektfil börjar felsökningsprogrammet alltid med den aktiva Python-miljön för projektet. Du kan ändra den aktuella aktiva miljön. Mer information finns i Välj en Python-miljö för ett projekt.
Om du felsöker en fristående Python-kodfil startar Visual Studio skriptet med den globala standardmiljön och inga argument.
Ange brytpunkter
Brytpunkter stoppar körningen av kod vid en markerad punkt så att du kan kontrollera programtillståndet.
Vissa brytpunkter i Python kan vara överraskande för utvecklare som har arbetat med andra programmeringsspråk. I Python är hela filen körbar kod, så Python kör filen när den läses in för att bearbeta eventuella toppnivåklass- eller funktionsdefinitioner. Om en brytpunkt har angetts kan det hända att debuggern bryter mitt i en klassdeklaration. Det här beteendet är korrekt, även om det ibland är överraskande.
Om du vill ange en brytpunkt väljer du i vänstermarginalen i kodredigeraren eller högerklickar på en kodrad och väljer Brytpunkt>Infoga brytpunkt. En röd punkt visas på varje rad som har en angivet brytpunkt.
Om du vill ta bort en brytpunkt väljer du den röda punkten eller högerklickar på kodraden och väljer Brytpunkt>Ta bort brytpunkt. Du kan också inaktivera en brytpunkt genom att välja den röda punkten och välja Brytpunkt>Inaktivera brytpunkt.
Ange villkor och åtgärder
Du kan anpassa de villkor under vilka en brytpunkt utlöses, till exempel att endast bryta när en variabel är inställd på ett visst värde eller värdeintervall.
Om du vill ange villkor högerklickar du på brytpunktens röda punkt och väljer Villkor. Dialogrutan Brytpunktsinställningar öppnas.
I dialogrutan kan du lägga till flera villkor och skapa villkorsuttryck med hjälp av Python-kod. Fullständig information om den här funktionen i Visual Studio finns i Brytpunktsvillkor.
Du kan också ange Åtgärder för en brytpunkt. Du kan skapa ett meddelande för att logga till fönstret Utdata och ange om du vill fortsätta körningen automatiskt.
När du loggar ett meddelande skapas en spårningspunkt som inte lägger till loggningskod i ditt program direkt.
Beroende på hur du konfigurerar villkor och åtgärder för en brytpunkt ändras den röda ikonen i vänstermarginalen för att ange dina inställningar. Du kan se punktformen, en klocktimer eller en romb.
Stega igenom kod
När Visual Studio stoppar kodkörningen vid en brytpunkt finns det flera kommandon som du kan använda för att gå igenom koden eller köra kodblock innan du bryter igen. Kommandona är tillgängliga på några platser i Visual Studio, inklusive felsökningsprogrammets verktygsfält, Felsöka-menyn, snabbmenyn som nås med högerklick i kodredigeraren och via kortkommandon.
Följande tabell sammanfattar dessa kommandon och tillhandahåller kortkommandot:
Befallning | Snabbkommando | Beskrivning |
---|---|---|
Stoppa | Shift + F5 | Stoppa felsökningssessionen. |
Starta om | Ctrl + Skift + F5 | Starta om den aktuella felsökningssessionen. |
Fortsätt | F5 | Kör kod tills du når nästa brytpunkt. |
Kliv in i | F11 | Kör nästa instruktion och stanna. Om nästa instruktion är ett anrop till en funktion stoppas felsökningsprogrammet på den första raden i den anropade funktionen. |
Steg över | F10 | Kör nästa instruktion, inklusive att göra ett anrop till en funktion (köra all dess kod) och tillämpa eventuella returvärden. Med det här kommandot kan du enkelt hoppa över funktioner som du inte behöver felsöka. |
Kliva Ut | Shift+F11 | Kör koden till slutet av den aktuella funktionen och gå sedan till anropande instruktion. Det här kommandot är användbart när du inte behöver felsöka resten av den aktuella funktionen. |
Kör till markör | Ctrl+F10 | Kör koden upp till markörens plats i redigeraren. Med det här kommandot kan du enkelt hoppa över ett kodsegment som du inte behöver felsöka. |
Ställ in nästa sats | Ctrl+Shift+F10 | Ändra den aktuella körpunkten i koden till platsen för markören. Med det här kommandot kan du utelämna ett segment av kod från att köras alls, till exempel när du vet att koden är felaktig eller ger en oönskad bieffekt. |
Visa nästa sats | Alt+Num+\ | Återgå till nästa instruktion att köra i koden. Det här kommandot hjälper dig att hitta platsen i koden där felsökningsprogrammet stoppas. |
Granska och ändra värden
När du stoppar kodkörningen i felsökningsprogrammet kan du granska och ändra värdena för variabler. Du kan också använda fönstret Watch för att övervaka enskilda variabler och anpassade uttryck. Mer information finns i Inspektera variabler.
Om du vill visa ett värde med hjälp av funktionen DataTips under felsökningen hovra musen över valfri variabel i redigeraren. Du kan välja variabelvärdet för att ändra det:
Om du vill använda fönstret Autos väljer du Felsöka>Windows>Autos. Det här fönstret innehåller variabler och uttryck som ligger nära den aktuella instruktionen. Du kan dubbelklicka i värdekolumnen eller välja och ange F2- för att redigera värdet:
Mer information om hur du använder fönstret Autos finns i Granska variabler i fönstren Autos and Locals.
Om du vill använda fönstret Locals väljer du Felsöka>Windows>Locals. Det här fönstret visar alla variabler som finns i det aktuella omfånget, som kan redigeras igen:
Mer information om hur du använder fönstret Lokaler finns i Granska variabler i fönstren Automatik och Lokaler.
Om du vill använda Watch-fönster väljer du Felsöka>Windows>Watch>Watch 1–4. Med det här alternativet kan du ange godtyckliga Python-uttryck och visa resultatet. Uttryck omvärderas för varje steg:
Mer information om hur du använder fönstret Watch finns i Ställ in en bevakning på variabler med fönstren Watch och QuickWatch.
Om du vill granska ett strängvärde väljer du Visa (förstoringsglas) till höger om posten Value. Alla typerna
str
,unicode
,bytes
ochbytearray
är tillgängliga för inspektion.Listrutan Visa visar fyra visualiseringsalternativ: Text, HTML, XML eller JSON.
När du har valt en visualisering visar en popup-dialogruta det ociterade strängvärdet enligt den valda typen. Du kan visa strängen med omslutning och rullning, syntaxmarkering och trädvyer. Dessa visualiseringar kan hjälpa dig att felsöka problem med långa och komplexa strängar.
Visa undantag
Om ett fel inträffar i programmet under felsökningen, men du inte har någon undantagshanterare för det, bryts felsökningsprogrammet vid tidpunkten för undantaget:
När ett fel inträffar kan du kontrollera det aktuella programtillståndet, inklusive anropsstacken. Men om du går igenom koden fortsätter felsökningsprocessen att utlösa undantaget tills det hanteras eller programmet avslutas.
Om du vill se en utökad vy över undantag väljer du Felsöka>Windows>Undantagsinställningar.
I fönstret Undantagsinställningar kontrollerar kryssrutan bredvid ett undantag om felsökaren alltid pauser när undantaget aktiveras.
Om du vill bryta oftare för ett visst undantag markerar du kryssrutan bredvid undantaget i fönstret Undantagsinställningar.
Som standard bryts de flesta undantag när en undantagshanterare inte kan hittas i källkoden. Om du vill ändra det här beteendet högerklickar du på ett undantag och ändrar alternativet Fortsätt när det är ohanterat i användarkod. Om du vill bryta mindre ofta för undantaget avmarkerar du det här alternativet.
Om du vill konfigurera ett undantag som inte visas i fönstret undantagsinställningar väljer du Lägg till (plussymbol). Ange ett namn för undantaget för övervakning. Namnet måste matcha undantagets fullständiga namn.
Konfigurera alternativ för projektfelsökning
Som standard startar felsökningsprogrammet ditt program med python-startprogrammet, inga kommandoradsargument och inga andra särskilda sökvägar eller villkor. Du kan konfigurera startalternativen för ett Python-projekt genom att ange felsökningsegenskaperna.
Om du vill komma åt felsökningsegenskaperna för ett projekt högerklickar du på Python-projektet i Solution Explorer, väljer Egenskaperoch väljer sedan fliken Felsöka.
I följande avsnitt beskrivs de specifika egenskaperna.
Definiera startbeteende
I följande tabell visas möjliga värden för egenskapen Startläge. Använd den här egenskapen för att definiera startbeteendet för felsökningsprogrammet.
Värde | Beskrivning |
---|---|
Standard Python-uppstartprogram | Använd felsökningskod som skrivits i bärbar Python som är kompatibel med CPython, IronPython och varianter som Stackless Python. Det här alternativet ger den bästa upplevelsen för att felsöka ren Python-kod. När du ansluter till en körande python.exe -process används startprogrammet som anges i den här egenskapen. Den här startprogrammet innehåller också felsökning i blandat läge för CPython, vilket gör att du kan växla sömlöst mellan C/C++-kod och Python-kod. |
Webbstartprogram | Starta standardwebbläsaren vid start och aktivera felsökning av mallar. Mer information finns i avsnittet felsökning av webbmallen. |
Django Webbstartare | Implementera identiskt beteende som webbstartarens-egenskap, fast i en Django-miljö. Använd endast det här alternativet för bakåtkompatibilitet. |
IronPython-startprogrammet (.NET) | Använd .NET-felsökningsprogrammet, som endast fungerar med IronPython, men som gör det möjligt att stega mellan alla .NET-språkprojekt, inklusive C# och Visual Basic. Den här startprogrammet används om du ansluter till en .NET-process som körs som är värd för IronPython. |
Definiera körningsbeteende
I följande tabell beskrivs egenskaper som du kan ange för att konfigurera körningsbeteendet för felsökningsprogrammet.
Egenskap | Beskrivning |
---|---|
Sökvägar | Ange sökvägarna för filer och mappar som Visual Studio använder för projektet. Dessa värden matchar de objekt som visas i projektets sökvägar nod i Solution Explorer. Du kan ange sökvägar i den här dialogrutan, men det kan vara enklare att använda Solution Explorer, där du kan bläddra bland mappar och automatiskt konvertera sökvägar till relativt formulär. |
skriptargument | Definiera argumenten som ska läggas till i kommandot Visual Studio använder för att starta skriptet och visas efter skriptets filnamn. Det första objektet som anges i värdet är tillgängligt för skriptet som sys.argv[1] , det andra som sys.argv[2] och så vidare. |
tolkningsargument | Lista argumenten som ska läggas till på startkommandoraden före namnet på skriptet. Vanliga argument är -W ... för att kontrollera varningar, -O att optimera programmet något och -u att använda obuffertad I/O. IronPython-användare kommer sannolikt att använda det här fältet för att skicka -X alternativ, till exempel -X:Frames eller -X:MTA . |
tolkväg | Identifiera en tolksökväg för att åsidosätta sökvägen som är associerad med den aktuella miljön. Värdet kan vara användbart för att starta ditt skript med en icke-standard tolk. |
miljövariabler | Använd den här egenskapen för att lägga till poster i form <NAME>=\<VALUE> . Visual Studio tillämpar det här egenskapsvärdet sist, ovanpå befintliga globala miljövariabler, och efter att PYTHONPATH har angetts enligt inställningen Sökvägar. Därför kan den här inställningen användas för att manuellt åsidosätta någon av dessa andra variabler. |
Arbeta med interaktiva fönster
Det finns två interaktiva fönster som du kan använda under en felsökningssession: standardfönstret för Visual Studio Immediate och fönstret Python Debug Interactive.
Öppna fönstret Omedelbart
Du kan använda visual studio-standardfönstret Omedelbara för att snabbt utvärdera Python-uttryck och inspektera eller tilldela variabler i ditt program som körs. Mer information finns i omedelbart fönster.
- Om du vill öppna fönstret Omedelbar väljer du Felsöka>Windows>Omedelbar. Du kan också använda kortkommandot Ctrl+Alt+jag.
Öppna det interaktiva felsökningsfönstret
Fönstret Python Debug Interactive erbjuder en omfattande miljö med fullständig interaktiv REPL- upplevelse tillgänglig vid felsökning, inklusive att skriva och köra kod. Det här fönstret ansluter automatiskt till alla processer som startas i felsökningsprogrammet med hjälp av Standard Python-startprogrammet, inklusive processer som är kopplade via Felsökning>Koppla till process. Det här fönstret är dock inte tillgängligt när du använder C/C++-felsökning i blandat läge.
Om du vill använda fönstret Debug Interactive, ska du välja Debug>Windows>Python Debug Interactive (Shift+Alt+I).
Fönstret Debug Interactive stöder särskilda metakommandon utöver de standard-REPL-kommandona, enligt beskrivningen i följande tabell:
Befallning | Beskrivning |
---|---|
$continue , $cont , $c |
Börja köra programmet från den aktuella instruktionen. |
$down , $d |
Flytta den nuvarande ramen ett steg ner i stacktrace. |
$frame |
Visa aktuellt bildrute-ID. |
$frame |
Växla den aktuella ramen till det angivna ram-ID:t. – Kräver ett <ram-ID> argument. |
$load |
Läs in kommandon från fil och kör dem tills de är färdiga. |
$proc |
Visa aktuellt process-IDnummer. |
$proc |
Växla den aktuella processen till det angivna process-ID:t. – Kräver ett <process-ID> argument. |
$procs |
Lista de processer som för närvarande felsöks. |
$stepin , $step , $s |
Gå in i nästa funktionsanrop, om möjligt. |
$stepout , $return , $r |
Gå ut från den aktuella funktionen. |
$stepover , $until , $unt |
Stega över nästa funktionsanrop. |
$thread |
Visa aktuellt tråd-ID. |
$thread |
Växla den aktuella tråden till det angivna tråd-ID:t. – Kräver ett <tråd-ID> argument. |
$threads |
Visa en lista över de trådar som för närvarande är debuggade. |
$up , $u |
Flytta upp aktuell ram en nivå i stackspårningen. |
$where , $w , $bt |
Visa en lista över ramarna för den aktuella tråden. |
Standardfönster för felsökning, till exempel Processer, Trådaroch Anropsstack, synkroniseras inte med fönstret Interaktiv felsökning. Om du ändrar den aktiva processen, tråden eller ramen i fönstret Debug Interactive påverkas inte de andra felsökningsfönstren. Att ändra den aktiva processen, tråden eller ramen i de andra felsökningsfönstren påverkar inte heller fönstret Debug Interactive.
Använda det äldre felsökningsprogrammet
Beroende på din miljökonfiguration kan du behöva använda det äldre felsökningsprogrammet:
- Visual Studio 2017 version 15.7 och tidigare med Python 2.6, 3.1 till 3.4 eller IronPython
- Visual Studio 2019 version 16.5 och senare med Python 2.6, 3.1 till 3.4 eller IronPython
- ptvsd 3.x och tidiga 4.x-versioner
Det äldre felsökningsprogrammet är standard i Visual Studio 2017 version 15.7 och tidigare.
- Om du vill använda det äldre felsökningsprogrammet väljer du Verktyg>Alternativ, expanderar alternativen Python>Felsökning och väljer alternativet Använd äldre felsökningsprogram.
Stöd för äldre Visual Studio- eller Python-versioner
Visual Studio 2017 version 15.8 och senare använder ett felsökningsprogram baserat på ptvsd version 4.1 och senare. Visual Studio 2019 version 16.5 och senare använder ett felsökningsprogram baserat på debugpy. Dessa två versioner av felsökningsprogrammet är kompatibla med Python 2.7 eller Python 3.5 och senare.
Om du kör någon av dessa versioner av Visual Studio, men du använder Python 2.6, 3.1 till 3.4 eller IronPython, visar Visual Studio felet Felsökaren stöder inte den här Python-miljön:
När Visual Studio rapporterar det här miljöfelet måste du använda det äldre felsökningsprogrammet.
Stöd för äldre ptvsd-versioner
Om du använder en äldre version av ptvsd i den aktuella miljön (till exempel en tidigare version av 4.0.x eller en 3.x-version som krävs för fjärrfelsökning), kan Visual Studio visa ett fel eller en varning.
Om din miljö använder ptvsd 3.x visar Visual Studio felet felsökningspaketet kunde inte läsas in:
Varningen felsökningspaketet är inaktuellt, visas när du använder en tidigare 4.x-version av ptvsd:
När Visual Studio rapporterar dessa miljöfel måste du använda det äldre felsökningsprogrammet.
Viktig
Även om du kan välja att ignorera varningen för vissa versioner av ptvsd kanske Visual Studio inte fungerar korrekt.
Hantera din ptvsd-installation
Följ dessa steg för att hantera din ptvsd-installation:
I fönstret Python-miljöer går du till fliken Paket.
Ange ptvsd i sökrutan och granska den installerade versionen av ptvsd:
Om versionen är lägre än 4.1.1a9 (versionen som medföljer Visual Studio) väljer du X- till höger om paketet för att avinstallera den äldre versionen. Visual Studio använder sedan sin paketerade version. (Du kan också avinstallera från PowerShell med hjälp av kommandot
pip uninstall ptvsd
.)Du kan också uppdatera ptvsd-paketet till den senaste versionen genom att följa anvisningarna i avsnittet Felsöka felsökningsscenarier.
Felsöka felsökningsscenarier
I följande scenarier beskrivs andra felsökningsalternativ för felsökningskonfigurationen.
Uppgradera ptvsd för Visual Studio 2019
Om du har problem med felsökningsprogrammet i Visual Studio 2019 version 16.4 och tidigare uppgraderar du först din version av felsökningsprogrammet på följande sätt:
I fönstret Python-miljöer går du till fliken Paket.
Ange ptvsd --upgrade i sökrutan och välj sedan kommandot Run: pip install ptvsd --upgrade. (Du kan också använda samma kommando från PowerShell.)
Om problemen kvarstår kan du skapa ett problem på PTVS GitHub-lagringsplats.
Not
För Visual Studio 2019 version 16.5 och senare är felsökning en del av Visual Studio Python-arbetsbelastningen och uppdateras tillsammans med Visual Studio.
Aktivera loggning av felsökningsprogram
När du undersöker ett felsökningsproblem kan Microsoft be dig att aktivera och samla in felsökningsloggar som hjälp vid diagnos.
Följande steg aktiverar felsökning i den aktuella Visual Studio-sessionen:
Öppna ett kommandofönster i Visual Studio genom att välja View>Other Windows>Command Window.
Ange följande kommando:
DebugAdapterHost.Logging /On /OutputWindow
Börja felsöka och gå igenom de steg som krävs för att återskapa problemet. Under denna tid visas felsökningsloggar i fönstret Utdata under Debug Adapter Host-logg. Du kan sedan kopiera loggarna från det fönstret och klistra in dem i ett GitHub-problem, e-postmeddelande och så vidare.
Om Visual Studio slutar svara eller om du annars inte kan komma åt fönstret Utdata startar du om Visual Studio, öppnar ett kommandofönster och anger följande kommando:
DebugAdapterHost.Logging /On
Börja felsöka och återskapa problemet igen. Felsökningsloggarna finns i
%temp%\DebugAdapterHostLog.txt
.