Dela via


Felsökning av tidsresor – översikt

Logga för felsökning av tidsresor med en klocka.

Vad är felsökning av tidsresor?

Time Travel Debugging är ett verktyg som gör att du kan samla in en spårning av din process när den körs och sedan spela upp den senare både framåt och bakåt. Med TTD (Time Travel Debugging) kan du enklare felsöka problem genom att "spola tillbaka" felsökningssessionen i stället för att behöva återskapa problemet tills du hittar felet.

Med TTD kan du gå tillbaka i tiden för att bättre förstå de villkor som leder fram till buggen och spela upp den flera gånger för att lära dig hur du bäst löser problemet.

TTD kan ha fördelar jämfört med kraschdumpfiler, som ofta missar tillstånd och körvägen som ledde till det ultimata felet.

Om du inte kan ta reda på problemet själv kan du dela spårningen med en medarbetare och de kan titta på exakt vad du tittar på. Detta kan möjliggöra enklare samarbete än direkt felsökning, eftersom de inspelade instruktionerna är desamma, medan adressplatserna och kodkörningen skiljer sig åt på olika datorer. Du kan också dela en viss tidpunkt för att hjälpa din medarbetare att ta reda på var du ska börja.

TTD är effektivt och fungerar för att lägga till så lite extra belastning som möjligt eftersom det samlar in programkodens körning i loggfiler.

TTD innehåller en uppsättning felsökningsdatamodellobjekt som gör att du kan köra frågor mot spårningen med LINQ. Du kan till exempel använda TTD-objekt för att hitta när en specifik kodmodul lästes in eller hitta alla undantag.

Skärmbild av WinDbg med kommandot Time Travel Debugging och tre tidslinjer.

Krav

Felsökning av tidsresor är integrerat med WinDbg, vilket ger sömlös inspelnings- och reprisupplevelse.

Om du vill använda TTD måste du köra det upphöjda felsökningsprogrammet. Installera WinDbg med ett konto som har administratörsbehörighet och använda det kontot när du spelar in i felsökningsprogrammet. Om du vill köra det upphöjda felsökningsprogrammet väljer du och håller kvar (eller högerklickar på) WinDbg-ikonen på Start-menyn och väljer sedan Mer > kör som administratör.

Versionsinformation

TTD fortsätter att utvecklas. För den senaste informationen, se Versionsinformation för felsökning av tidsresor.

Den skapade spårningsfilen som innehåller inspelningen kan innehålla personligt identifierbar eller säkerhetsrelaterad information, inklusive men inte nödvändigtvis begränsat till filsökvägar, register, minne eller filinnehåll. Exakt information beror på målprocessaktiviteten när den registrerades. Tänk på detta när du delar inspelningsfiler med andra.

TTD.exe kommandoradsinspelningsverktyg

Förutom att registrera spårningar i WinDbg-användargränssnittet finns det ett TTD.exe kommandoradsverktyg som är tillgängligt för att registrera en spårning.

Du kan ha scenarier där endast TTD-kommandoradsregistratorn krävs: inspelning på en dator utan att installera felsökningsprogrammet, avancerade inspelningsscenarier, testautomatisering osv. I dessa scenarier kan du bara installera TTD-kommandoradsposten via en URL. Mer information finns i Time Travel Debugging – TTD.exe kommandoradsverktyget.

Jämförelse av felsökningsverktyg

Den här tabellen sammanfattar för- och nackdelarna med de olika felsökningslösningar som är tillgängliga.

Tillvägagångssätt Fördelar Nackdelar
Direkt felsökning Interaktiv upplevelse, ser exekveringsflödet, kan ändra måltillståndet, välbekanta verktyg i en välbekant miljö. Stör användarupplevelsen, kan kräva arbete för att återskapa problemet upprepade gånger, kan påverka säkerheten, inte alltid ett alternativ på produktionssystem. Med reproduktion är det svårt att spåra tillbaka från felpunkten för att fastställa orsaken.
Dumpar Ingen kodning direkt, låg störande, baserat på utlösare. Successiva ögonblicksbilder eller livedumpar ger en enkel vy över tid. Omkostnaderna är i stort sett noll om de inte används.
Telemetri och loggar Enkelt, ofta kopplat till affärsscenarier/användaråtgärder, maskininlärningsvänligt. Problem uppstår i oväntade kodsökvägar (utan telemetri). Brist på datadjup, statiskt kompilerad i koden.
Time Travel Debugging (TTD) Bra på komplexa buggar, ingen kodning direkt, offline repeterbar felsökning, analysvänlig, fångar allt. Stora omkostnader vid rekordtid. Kan samla in mer data som behövs. Datafiler kan bli stora.

Videoträning

Mer information om TTD finns i dessa videor.

Defrag Tools 185 – Ivette och JamesP går över grunderna i TTD och demonstrerar vissa funktioner i WinDbg

Defrag Tools 186 – Jordi och JCAB demonstrerar fler av de fantastiska funktionerna i TTD i WinDbg

CppCon (YouTube) - Jordi, Ken och JamesM presenterade TTD i WinDbg på CppCon 2017

Grunderna i spårningsfilen

Storlek på spårningsfil

Spårningsfilen kan bli stor och användaren av TTD måste se till att det finns tillräckligt med ledigt utrymme. Om du registrerar ett program i några minuter kan spårningsfilerna snabbt växa till flera gigabyte. TTD anger inte en maximal storlek på spårningsfiler för komplexa tidskrävande scenarier. Att snabbt återskapa problemet kommer att hålla spårningsfilens storlek så liten som möjligt.

Spårnings- och indexfiler

En spårningsfil (.run) lagrar kodkörningen under inspelningen.

När inspelningen har stoppats skapas en indexfil (.idx) för att optimera åtkomsten till spårningsinformationen. Indexfiler skapas också automatiskt när WinDbg öppnar spårningsfiler.

Indexfiler kan också vara stora, vanligtvis dubbelt så stora som spårningsfilen.

Du kan återskapa indexfilen från spårningsfilen med hjälp av !tt.index kommandot .

0:000> !tt.index
Successfully created the index in 10ms.

Inspelningsfel och andra inspelningsutdata skrivs till en WinDbg-loggfil.

Alla utdatafiler lagras på en plats som konfigurerats av användaren. Standardplatsen finns i användardokumentmappen. För User1 lagras TTD-filerna till exempel här:

C:\Users\User1\Documents

Mer information om hur du arbetar med spårningsfiler finns i Felsökning av tidsresor – Arbeta med spårningsfiler.

Saker att hålla utkik efter

Anti-virusinkompatibiliteter

Du kan stöta på inkompatibiliteter på grund av hur TTD ansluter till processen för att spela in dem. Vanligtvis uppstår problem med antivirusprogram eller annan systemprogramvara som försöker spåra och skugga systemminnesanrop. Om du stöter på problem med inspelning, till exempel ett meddelande om otillräcklig behörighet, kan du prova att tillfälligt inaktivera antivirusprogram.

Andra verktyg som försöker blockera minnesåtkomst kan också vara problematiska, till exempel Microsoft Enhanced Mitigation Experience Toolkit.

Ett annat exempel på en miljö som står i konflikt med TTD är ramverket för elektronprogram. I det här fallet kan spårningen registreras, men ett dödläge eller en krasch av processen som registreras är också möjliga.

Endast användarläge

TTD stöder för närvarande endast användarlägesåtgärd, så det går inte att spåra en process i kernelläge.

Skrivskyddad uppspelning

Du kan resa tillbaka i tiden, men du kan inte ändra historik. Du kan använda kommandon för läsminne, men du kan inte använda kommandon som ändrar eller skriver till minnet.

Systemskyddade processer

Vissa systemskyddade processer i Windows, till exempel PPL-processen (Protected Process Light), skyddas, så TTD:t kan inte mata in sig själv i den skyddade processen för att tillåta registrering av kodkörningen.

Prestandapåverkan av inspelning

Inspelning av ett program eller en process påverkar datorns prestanda. De faktiska prestandakostnaderna varierar beroende på mängden och typen av kod som körs under inspelningen. Du kan förvänta dig en prestandaförlust på cirka 10 till 20 gånger i typiska inspelningsförhållanden. Ibland blir det inte någon märkbar avmattning i användargränssnittet. Men för de mer resursintensiva åtgärderna, till exempel dialogrutan Öppna fil, ser du effekten av inspelningen.

Fel i spårningsfil

Det finns vissa fall där spårningsfilfel kan inträffa. För mer information, se Felsökning av debuggning för tidsresor.

Avancerade funktioner för felsökning av tidsresor

Tidslinjer

Tidslinjer är en visuell framställning av händelser som inträffar under utförandet. Dessa händelser kan vara platser för: brytpunkter, minnesläsning/skrivningar, funktionsanrop och returer samt undantag. Mer information om tidslinjer finns i WinDbg – tidslinjer.

Stöd för felsökningsdatamodell

  • Inbyggt stöd för datamodeller – TTD innehåller stöd för datamodeller. Att använda LINQ-frågor för att analysera programfel kan vara ett kraftfullt verktyg. Du kan använda datamodellfönstret i WinDbg för att arbeta med en utökningsbar och bläddringsbar version av "dx" och "dx -g", vilket gör att du kan skapa tabeller med NatVis-, JavaScript- och LINQ-frågor.

Allmän information om datamodellen för felsökningsprogrammet finns i WinDbg – Datamodell. Information om hur du arbetar med TTD-felsökningsobjektmodellen finns i Felsökning av tidsresor – Introduktion till felsökningsobjekt för tidsresor.

Stöd för skript

Allmän information om hur du arbetar med JavaScript och NatVis finns i WinDbg – Skript.

TTD.exe kommandoradsverktyget

Kommandoradsverktyget TTD.exe för att registrera spårningar är tillgängligt. Mer information finns i Time Travel Debugging – TTD.exe kommandoradsverktyget.

Stöd för TTD för hanterad kod

Du kan använda SOS-felsökningstillägget (sos.dll) som körs i 64-bitarsläge för att felsöka hanterad kod med TTD i WinDbg. Mer information finns i Felsöka hanterad kod med Hjälp av Windows-felsökningsprogrammet.

Komma igång med TTD

Läs de här avsnitten för att spela in och spela upp en spårningsfil samt för information om hur du arbetar med spårningsfiler och felsökning.

I de här avsnitten beskrivs ytterligare avancerade funktioner i felsökning av tidsresor.