Come trovare e correggere i bug nel software commerciale su Windows
Secondo Wikipedia, “Un bug software è un errore, un difetto, un guasto o un guasto in un programma o sistema per computer che lo induce a produrre un risultato errato o inaspettato, o a comportarsi in modo non intenzionale, alla fine schiantando l’applicazione. Il processo di correzione dei bug è chiamato “debug” e spesso utilizza tecniche formali o strumenti per individuare i bug .”
La maggior parte delle volte i bug possono essere riprodotti in un ambiente di sviluppo e corretti prima di inviare una versione alla produzione. Ma a volte i bug dipendono dall’ambiente o dal profilo particolare degli utenti, ad esempio utilizzando caratteri speciali nel nome di una cartella, rendendo più difficile comprendere la causa principale di un bug. I bug peggiori richiederanno il supporto dell’utente per impostare una sessione di condivisione dello schermo per guardare un utente riprodurre un bug.
In Dashlane, il team di Windows utilizza diversi strumenti per trovare e riprodurre i bug:
- Log tecnici per individuare dove sorgono problemi e aiutare a risolverli, a volte che richiedono diverse iterazioni e l’interazione con l’utente che si verifica un problema
- Microsoft Process Monitor e Process Explorer, due strumenti gratuiti che individuare installazioni difettose o un ambiente danneggiato
Recentemente, Microsoft ha introdotto una nuova versione di un altro strumento di sviluppo, WinDbg. Questa applicazione è stata portata in un app UWP, è liberamente disponibile su Microsoft Store, e viene fornito con una caratteristica molto bella e utile: TTD, o Time Travel Debugging. Pensa a un momento in cui dovevi correggere un bug molto difficile da riprodurre che stava accadendo solo su una macchina specifica. Oppure pensa al tempo che hai speso per installare un ambiente di sviluppo su quella macchina, se potessi. E poi pensa a quante volte hai dovuto avviare la tua applicazione in modalità debug per riprodurre il bug, e poi hai perso la linea danneggiata colpendo accidentalmente F5 invece di F11. TTD trasforma questo in un pezzo di torta, come avete solo bisogno di registrare il bug una volta per farvi riprodurre più e più volte, sia in avanti che indietro.
Time Travel Debugging con WinDbg
TTD è una soluzione di debug inversa. Consiste di 3 passaggi:
- Registra l’app o il processo sulla macchina in grado di riprodurre il bug. Utilizzare WinDbg con diritti di amministratore e avviare un eseguibile, o allegare a uno già in esecuzione per registrare la sua traccia. Il risultato è un file (.run extension) contenente tutte le informazioni per riprodurre il bug. Per questo motivo, a Dashlane possiamo usarlo solo per eseguire il debug di bug che si verificano prima del login in modo da non raccogliere informazioni sensibili degli utenti.
- Riprodurre la traccia registrata in avanti e indietro tutte le volte necessarie per comprendere il problema. Una volta caricato, WinDbg crea un indice della traccia, che fornisce una ricerca completa e veloce della memoria. Il file registrato può essere caricato su qualsiasi macchina; di solito apriamo su una macchina sviluppatore, dove possiamo caricare codice sorgente e simboli PDB. In questo modo, possiamo riprodurre la traccia mentre stiamo eseguendo il codice nel nostro IDE con i record di processo e memoria dalla macchina registrata. (Assicurarsi che il codice sorgente e i simboli corrispondano alla versione del processo registrato.)
- Analizza aggiungendo punti di interruzione, esegui query per identificare problemi di codice comuni e ottieni pieno accesso alla memoria e ai locali per capire cosa sta succedendo.
Esempio
Supponiamo di aver scritto e costruito una semplice applicazione console.
void
GuiltyFunction(
int
a,
int
b,
int
c)
{
int
x = a + b + c;
int
y = 0;
y = x / b;
}
int
main()
{
int
a = 10;
int
b = 0;
int
c = 3;
GuiltyFunction(a, b, c);
return
0;
}
supponiamo che l’costruito applicazione (TestTTD.exe) e il file simbolo (TestTTD.pdb) sono in C:\TestTTD\bin, e il codice sorgente sta in C:\TestTTD\src.
Registra
- Apri WinDbg con diritti elevati.
- Nella scheda File, scegliere Avvia eseguibile (avanzate). Nel campo Eseguibile, immettere C:\TestTTD\TestTTD.exe. Controllare il processo di registrazione con il debug del viaggio nel tempo, impostare la directory di output su un percorso scrivibile ed esistente, quindi fare clic su OK.
- Quando l’applicazione si blocca, WinDbg salva un file di traccia (.esegui estensione) e registra la posizione durante il caricamento.
- Arrestare il debugger e aprire il percorso del file di traccia.
Replay
- Apri WinDbg.
- Nella scheda File, selezionare Impostazioni dalla barra laterale sinistra. Selezionare Impostazioni di debug, aggiungere C:\TestTTD\src al campo Percorso sorgente e C:\TestTTD\bin al campo Percorso simbolo. Fare clic su OK per salvare le modifiche.
- Nella scheda File, selezionare Apri file di traccia e individuare il file di traccia creato al passaggio Record.
Analizza
- Una volta caricato il file di traccia registrato in WinDbg, aggiungere un punto di interruzione per interrompere e analizzare lo stato dell’applicazione. Caricare un file di script dalla scheda Origine, quindi fare clic sul lato sinistro della riga del punto di interruzione desiderato. Premi F5 per eseguire il punto di interruzione.
- Ora premi F10 per passare, come in una sessione di debug di Visual Studio. Fare clic su Passo indietro per eseguire all’indietro.
Conclusioni
Quando si esegue il debug del codice di produzione e bug difficilmente riproducibili, WinDbg e il suo Time Travel Debug sono un ottimo strumento per gli sviluppatori che possono aiutare a risparmiare tempo e risorse registrando l’applicazione difettosa solo sull’ambiente interessato e dando la possibilità di riprodurlo ovunque. Per ulteriori informazioni, si prega di visitare il blog di Microsoft, o guardare la loro demo sul sito web di MSDN Channel 9.