Debugging tools per sistemisti

Come tutti sappiamo i crash di Windows si verificano, l’obiettivo quindi è individuarne la causa il prima possibile in modo da evitare che si ripetano.
I crash di sistema spesso sono provocati da bug presenti nel software o nei driver e quindi è probabile che non si verifichino in modo isolato.

Quando si verifica un crash Windows crea un memory dump. Un memory dump consiste in un file che contiene i dati che erano in memoria al momento del crash tramite i quali possiamo risalire alle cause del problema.

Windows può  creare tre tipi di dump
Small dump – Uno small dump è un file di 64 kb che non contiene gli eseguibili che erano in esecuzione quando si è verificato il crash.
Kernel dump – Corrisponde alla ram occupata dal kernel del sistema operativo.
Full dump – Corrisponde alla ram del sistema. Contiene quindi tutti gli eseguibili e i dati presenti in memoria al momento del crash.

Per impostare il tipo di dump da creare bisogna eseguire le seguenti operazioni
-Aprire il pannello di controllo
-Fare doppio click su Sistema
-Accedere alla scheda Avanzate
-Cliccare su Avvio e Ripristino
-Selezionare il tipo di dump che si vuole venga generato nella nuova finestra.

In questa finestra possiamo anche impostare altre opzioni relative alla generazione dei dump come la possibilità di sovrascrivere dump precedenti.

Per analizzare i dump abbiamo bisogno dei debugging tool che sono scaricabili dall’indirizzo http://www.microsoft.com/whdc/devtools/debugging/default.mspx.
I debugging tool includono KD.exe (un kernel debugger da linea di comando),NTSD.exe,CDB.exe (due user-mode debugger da linea di comando) e WinDbg che è la versione GUI del debugger che permette il debugging sia in kernel mode che in user mode.

Prima di potere utilizzare WinDbg è necessario configurare i symbol di Windows
I symbol sono prodotti durante la compilazione di un programma e permettono di associare gli indirizzi di memoria ai programmi e alle funzioni che li stavano utilizzando e sono quindi indispensabili nella fase di debug.
Per impostare WinDbg in modo che i symbol di Windows vengano scaricati automaticamente da debugger è necessario accedere al menu File – Symbol File Path e inserire nella finestra che viene aperta la stringa SRV*c:symbols cache*http://msdl.microsoft.com/download/symbols sostituendo a c:symbols il percorso in cui si vogliono scaricare i symbols.

A questo punto è possibile aprire il file di dump accedendo al menu File – Open Crash Dump. Windbg scaricherà i symbol e mostrerà il risultato.

Per analizzare il dump possiamo utilizzare alcuni comandi digitandoli sulla linea di comando che si trova in basso nella finestra del programma.
!analyze -v mostra informazioni sullo stato del sistema al momento del crash e sul tipo di errore che si è verificato.
In particolare possiamo trovare le informazioni più utili nella sezione Debugging Details. Qui possiamo individuare dati come DEFAULT_BUCKET_ID che mostra la categoria dell’errore (nel caso di un problema causato da un driver la categoria sarebbe DRIVER_FAULT) e IMAGE_NAME che visualizza cosa ha causato il crash (nel caso di problema causato da un driver qui troveremo il nome della relativa dll).

Una volta individuato il modulo che sospettiamo essere la causa del problema possiamo utilizzare il comando lmv per ottenere maggiori dettagli.
Nel caso che abbiamo analizzato in precedenza utilizzando lmv potremmo ottenere maggiori informazioni sulla dll e individuare le informazioni sul relativo driver.

WinDbg supporta l’utilizzo di numerosi altri comandi e permette di effettuare analisi più complessi ma seguendo questi passi è possibile individuare in un buon numero casi l’origine del problema e semplificare il lavoro di sistemista.