Debug di viaggi temporali - Panoramica

Time travel debugging logo featuring a clock.

Che cos'è il debug del tempo di viaggio?

Time Travel Debugging è uno strumento che consente di acquisire una traccia del processo durante l'esecuzione e quindi di riprodurre il processo in un secondo momento sia avanti che indietro. Il debug TTD (Time Travel Debugging) consente di eseguire il debug dei problemi più facilmente consentendo di "riavvolgere" la sessione del debugger, invece di dover riprodurre il problema fino a quando non viene trovato il bug.

TTD consente di tornare indietro nel tempo per comprendere meglio le condizioni che portano al bug e riprodurre più volte per imparare a risolvere meglio il problema.

TTD può avere vantaggi rispetto ai file di dump di arresto anomalo del sistema, che spesso non superano lo stato e il percorso di esecuzione che hanno portato all'errore finale.

Nel caso in cui non sia possibile capire il problema autonomamente, è possibile condividere la traccia con un collega e possono esaminare esattamente ciò che si sta guardando. Ciò può consentire una collaborazione più semplice rispetto al debug live, come le istruzioni registrate sono le stesse, mentre le posizioni degli indirizzi e l'esecuzione del codice differiscono in PC diversi. È anche possibile condividere un punto specifico nel tempo per aiutare il collega a capire dove iniziare.

TTD è efficiente e funziona per aggiungere il minor sovraccarico possibile durante l'acquisizione dell'esecuzione del codice nei file di traccia.

TTD include un set di oggetti modello di dati del debugger per consentire di eseguire query sulla traccia usando LINQ. Ad esempio, è possibile usare oggetti TTD per individuare quando è stato caricato un modulo di codice specifico o individuare tutte le eccezioni.

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

Requisiti

Il debug di viaggi temporali è integrato con WinDbg, offrendo un'esperienza di registrazione e riproduzione senza problemi.

Per usare TTD, è necessario eseguire il debugger con privilegi elevati. Installare WinDbg usando un account con privilegi di amministratore e usarlo durante la registrazione nel debugger. Per eseguire il debugger con privilegi elevati, selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) sull'icona WinDbg nel menu Start e quindi selezionare Altro > esegui come Amministrazione istrator.

Il file di traccia creato che contiene la registrazione può contenere informazioni personali o correlate alla sicurezza, inclusi, ma non necessariamente limitati ai percorsi di file, al Registro di sistema, alla memoria o al contenuto del file. Le informazioni esatte dipendono dall'attività del processo di destinazione durante la registrazione. Tenere presente questo problema quando si condividono i file di registrazione con altre persone.

TTD.exe'utilità di registrazione della riga di comando

Oltre a registrare tracce nell'interfaccia utente di WinDbg, è disponibile un'utilità della riga di comando TTD.exe per registrare una traccia.

Potresti avere scenari in cui è necessario solo il registratore da riga di comando TTD: registrazione in un PC senza installare il debugger, scenari di registrazione avanzati, automazione dei test e così via. In questi scenari è possibile installare solo il registratore della riga di comando TTD tramite un URL. Per altre informazioni, vedere Time Travel Debugging - TTD.exe'utilità della riga di comando.

Confronto degli strumenti di debug

Questa tabella riepiloga i vantaggi e i svantaggi delle diverse soluzioni di debug disponibili.

Approccio Vantaggi Svantaggi
Debug in tempo reale L'esperienza interattiva, vede il flusso di esecuzione, può modificare lo stato di destinazione, strumento familiare nell'impostazione familiare. Interrompe l'esperienza utente, potrebbe richiedere sforzi per riprodurre ripetutamente il problema, potrebbe influire sulla sicurezza, non sempre un'opzione nei sistemi di produzione. Con la riprova difficile da ripristinare dal punto di errore per determinare la causa.
Dump Nessuna codifica iniziale, scarsa intrusiva, in base ai trigger. Gli snapshot successivi o i dump live offrono una visualizzazione semplice "nel tempo". Il sovraccarico è essenzialmente zero se non viene usato.
Telemetria e log Leggero, spesso legato a scenari aziendali/azioni utente, facile da usare per l'apprendimento automatico. I problemi si verificano in percorsi di codice imprevisti (senza dati di telemetria). Mancanza di profondità dei dati, compilata in modo statico nel codice.
Debug del tempo di viaggio (TTD) Ottimo per bug complessi, senza codifica iniziale, debug ripetibile offline, analisi descrittiva, acquisisce tutto. Sovraccarico elevato in fase di record. Può raccogliere più dati necessari. I file di dati possono diventare di grandi dimensioni.

Video di formazione

Per altre informazioni su TTD, vedere questi video.

Defrag Tools 185 - Ivette e JamesP scorrere le nozioni di base di TTD e demo alcune funzionalità in WinDbg

Strumenti di deframmentazione 186 - Demo diIntune e JCAB più grandi funzionalità di TTD in WinDbg

CppCon (YouTube) - Roberto, Ken e JamesM hanno presentato TTD in WinDbg a CppCon 2017

Nozioni di base sul file di traccia

Dimensioni del file di traccia

Il file di traccia può ottenere grandi dimensioni e l'utente di TTD deve assicurarsi che sia disponibile spazio libero adeguato. Se si registra un programma per alcuni minuti, i file di traccia possono aumentare rapidamente fino a diversi gigabyte. TTD non imposta una dimensione massima dei file di traccia per consentire scenari complessi a esecuzione prolungata. Ricreando rapidamente il problema, manterrà le dimensioni del file di traccia il più piccolo possibile.

File di traccia e indice

Un file di traccia (.run) archivia l'esecuzione del codice durante la registrazione.

Una volta arrestata la registrazione, viene creato un file di indice (.idx) per ottimizzare l'accesso alle informazioni di traccia. I file di indice vengono creati automaticamente anche quando WinDbg apre i file di traccia.

I file di indice possono anche essere di grandi dimensioni, in genere due volte più grandi del file di traccia.

È possibile ricreare il file di indice dal file di traccia usando il !tt.index comando .

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

La registrazione di errori e altri output di registrazione viene scritta in un file di log WinDbg.

Tutti i file di output vengono archiviati in un percorso configurato dall'utente. Il percorso predefinito si trova nella cartella dei documenti degli utenti. Ad esempio, per User1 i file TTD verranno archiviati qui:

C:\Users\User1\Documents

Per altre informazioni sull'utilizzo dei file di traccia, vedere Time Travel Debugging - Working with trace files .For more information on working the trace files, see Time Travel Debugging - Working with trace files.

Cose da cercare

Incompatibilità antivirus

È possibile che si verifichino incompatibilità a causa del modo in cui i hook TTD vengono registrati nel processo. In genere si verificano problemi con l'antivirus o altri software di sistema che tentano di rilevare e nascondere le chiamate di memoria del sistema. Se si verificano problemi di registrazione, ad esempio un messaggio di autorizzazione insufficiente, provare a disabilitare temporaneamente qualsiasi software antivirus.

Anche altre utilità che tentano di bloccare l'accesso alla memoria possono essere problematiche, ad esempio Microsoft Enhanced Mitigation Experience Toolkit.

Un altro esempio di ambiente in conflitto con TTD sarebbe il framework dell'applicazione elettrone. In questo caso la traccia può registrare, ma è anche possibile registrare un deadlock o un arresto anomalo del processo da registrare.

Solo modalità utente

TTD supporta attualmente solo l'operazione in modalità utente, pertanto non è possibile tracciare un processo in modalità kernel.

Riproduzione di sola lettura

È possibile tornare indietro nel tempo, ma non è possibile modificare la cronologia. È possibile usare i comandi read memory, ma non è possibile usare comandi che modificano o scrivono in memoria.

Processi protetti dal sistema

Alcuni processi protetti dal sistema Windows, ad esempio il processo PPL (Protected Process Light) sono protetti, quindi il TTD non può inserire se stesso nel processo protetto per consentire la registrazione dell'esecuzione del codice.

Impatto sulle prestazioni della registrazione

La registrazione di un'applicazione o un processo influisce sulle prestazioni del PC. Il sovraccarico effettivo delle prestazioni varia in base alla quantità e al tipo di codice in esecuzione durante la registrazione. È possibile prevedere un successo di prestazioni 10x-20x in scenari di registrazione tipici. A volte non ci sarà un rallentamento evidente, ma per operazioni con un numero maggiore di risorse (ad esempio, finestra di dialogo Apri file) è possibile visualizzare l'impatto della registrazione.

Errori del file di traccia

In alcuni casi possono verificarsi errori di file di traccia. Per altre informazioni, vedere Debug di viaggi temporali - Risoluzione dei problemi.

Funzionalità avanzate del debug di viaggi temporali

Ecco alcune delle funzionalità avanzate TTD più importanti.

Sequenze temporali

Le sequenze temporali sono una rappresentazione visiva degli eventi che si verificano durante l'esecuzione. Questi eventi possono essere percorsi di: punti di interruzione, lettura/scrittura della memoria, chiamate di funzione e restituzioni e eccezioni. Per altre informazioni sulle sequenze temporali, vedere WinDbg - Sequenze temporali.

Supporto del modello di dati del debugger

  • Supporto predefinito del modello di dati: TTD include il supporto del modello di dati. L'uso di query LINQ per analizzare gli errori dell'applicazione può essere uno strumento potente. È possibile usare la finestra del modello di dati in WinDbg per usare una versione espandibile e esplorabile di 'dx' e 'dx -g', consentendo di creare tabelle usando NatVis, JavaScript e query LINQ.

Per informazioni generali sul modello di dati del debugger, vedere Modello winDbg - Dati. Per informazioni sull'uso del modello a oggetti del debugger TTD, vedere Time Travel Debugging - Introduction to Time Travel Debugging objects .

Supporto per gli script

  • Automazione degli script: il supporto di script per JavaScript e NatVis consente l'automazione dell'analisi dei problemi. Per altre informazioni, vedere Debug di viaggi temporali - Automazione JavaScript.

Per informazioni generali sull'uso di JavaScript e NatVis, vedere WinDbg - Scripting.

utilità della riga di comando TTD.exe

È disponibile TTD.exe'utilità della riga di comando per registrare le tracce. Per altre informazioni, vedere Time Travel Debugging - TTD.exe'utilità della riga di comando.

Supporto TTD del codice gestito

È possibile usare l'estensione di debug SOS (sos.dll) in esecuzione in modalità a 64 bit per eseguire il debug del codice gestito usando TTD in WinDbg. Per altre informazioni, vedere Debug di codice gestito tramite il debugger di Windows.

Introduzione a TTD

Esaminare questi argomenti per registrare e riprodurre un file di traccia, nonché per informazioni sull'uso dei file di traccia e sulla risoluzione dei problemi.

Questi argomenti descrivono funzionalità avanzate aggiuntive nel debug del tempo di spostamento.