
Con la vasta gamma di stampanti e driver oggi sul mercato è un compito davvero arduo determinare quale può aver causato un crash o un blocco dello spooler di stampa. Centinaia di utenti possono essere rimasti vittime dell'insidioso driver di stampa che però può non aver lasciato alcun indizio di ciò che ha fatto. In questo articolo vedremo come è possibile determinare quale driver di stampa ha causato il crash del vostro spooler.
Il processo di troubleshooting di un crash dello spooler di stampa è molto simile a quello di un crash di sistema. Uno spooler di stampa, tuttavia, non può generare un crash dump per proprio conto, perciò può essere utilizzato un tool chiamato ADPlus per catturare l'immagine della memoria.
Come usare ADPlus
ADPlus è uno script VB che può essere scaricato gratuitamente da Microsoft come parte del Debugging Tools for Windows. Una volta che avrete installano i tool di debug, troverete ADPlus.vbs nella seguente cartella:
Program Files\Debugging Tools for Windows.
ADPlus può essere utilizzato in due modi a seconda che il vostro spooler di stampa sia bloccato o sia andato in crash. Nell'hang mode, ADPlus forza un processo di dump su un'applicazione, o in questo caso, su uno spooler di stampa. Il dump contiene tutti i thread associati al processo insieme alle varie DLL e ai driver di stampa coinvolti. Pochi semplici comandi del debugger consentono di determinare a quali stampanti ha accesso lo spooler e il driver corrispondenti.
Nel crash mode, ADPlus eseguirà il monitoring di un processo e catturerà un dump della memoria quando individuerà una condizione ingestibile. La principale differenza tra le due modalità è che il crash mode deve essere stabilito prima della fine del processo, mentre l'hang mode viene utilizzato nel momento in cui il processo si blocca. In entrambe le modalità, viene interessato solo il processo di cui si sta effettuando il debug, i restanti processi e il sistema operativo continuano senza interruzioni.
Una volta catturato un dump del processo, è possibile utilizzare il debugger di Windows (Windbg) per analizzare il failure. Il debugger può anche essere scaricato gratuitamente da Microsoft come parte del Debugging Tools for Windows.
Nelle sezioni seguenti, daremo uno sguardo più da vicino agli step necessari per catturare uno dump dello spooler al fine di stabilire quale driver di stampa sia il colpevole e, quindi, risolvere il problema.
Crash mode
Come accennato, il crash mode di ADPlus cattura un dump della memoria del processo quando lo spooler di stampa si chiude in modo intermittente. Il crash mode deve essere attivato prima che si verifichi il problema che è causa del malfunzionamento dello spooler di stampa.
La prima volta che si utilizza ADPlus è necessario attribuire a cscript il ruolo di interprete di script predefinito. Per fare questo, avviate il prompt dei comandi e sostituite la cartella di default con quella del Debugging Tools per Windows. Quindi eseguite lo script ADPlus.vbs senza alcuna opzione:
C:\Program Files\Debugging Tools for Windows > ADPlus.vbs
Dovete eseguire questo passaggio solo una volta. A questo punto siete pronti per usare ADPlus per catturare un crash dello spooler. Vediamo la sintassi ADPlus utilizzata per impostare il rilevamento crash mode su un processo dello spooler di stampa:
ADPlus -crash -pn spoolsv.exe
Questo comando collegherà la console del debugger (Cdb.exe) al processo dello spooler di stampa e ridurrà a icona la finestra. Se incontrerà una condizione imprevista, il debugger produrrà un dump della memoria di processo e terminerà il processo stesso. Per impostazione predefinita, il dump viene scritto in una sottocartella all'interno della cartella del Debugging Tools for Windows. È quindi possibile utilizzare il Windows Kernel Debugger per analizzare il file dump risultante.
Hang mode
Nell'hang mode, viene usato ADPlus per forzare un dump della memoria di processo quando uno spooler di stampa si blocca o diventa al totalmente insensibile ai comandi. Ciò accade per esempio quando gli utenti si lamentano che dalle loro postazioni di lavoro non riescono a stampare anche se il processo di spooler esiste ancora. Dopo aver forzato il dump della memoria di processo, l'hang mode di ADPlus ripristinerà il processo invece di terminarlo come avviene invece nel crash mode. Vediamo la sintassi di ADPlus utilizzata per forzare un processo di crash nell'hang mode:
ADPlus -hang -pn spoolsv.exe
Analizzare il dump
Ottenuto il file dump del processo, utilizzate il tool Windbg per analizzare il failure dello spooler di stampa. Dopo aver installato Windbg, il primo passo è stabilire che la symbol path del debugger punti a Microsoft Symbol Server. Quindi, aprite il dump file del crash con Windbg utilizzando il menu pull-down File, poi scegliete Open Crash Dump... e quindi digitate il comando:
!analyze -v
Questo comando esegue un'analisi preliminare del dump e fornisce la migliore ipotesi su quale potrebbe essere stata la causa del problema. Il comando kv mostrerà lo stack trace, evidenziando quali driver o DLL sono coinvolti. Lo stack trace viene letto dal basso verso l'alto in modo da proporre in cima la funzione eseguita più di recente. Nel seguente esempio, potete vedere uno stack trace che illustra un failure dello spooler causato dall'ABCdriver:

Un altro comando utile è !peb, che permette di vedere tutti i driver e le DLL associati al processo dello spooler di stampa. Questo comando consente di visualizzare i blocchi di processo, come si vede nell'esempio seguente.
Infine, per determinare quale stampante e quale lavoro erano attivi al momento del failure, utilizzate il comando !teb. Verrà mostrato il blocco dei thread che fornisce i limiti e la base dello stack. È quindi possibile visualizzare il contenuto dello stack con il comando dc per rivelare la stampante che ha causato il problema. Probabilmente dovrete controllare diverse pagine di output, ma alla fine un testo ASCII sulla destra vi permetterà di riconoscer la stampante, il lavoro e il numero della porta:

In questo caso, il nome della stampante è Printer1, il numero della postazione di lavoro è 203 e il numero della porta è 04. Se guardate con attenzione, noterete che lo stack contiene anche il nome associato al driver. Una volta individuati la stampante e il driver, potete contattare il fornitore del caso per stabilire se è disponibile un driver aggiornato in grado di risolvere il problema.
Conclusioni
Come vedete, una volta che avrete familiarizzato con gli strumenti, il troubleshooting di un errore spooler di stampa è molto semplice. Partite da ADPlus per acquisire il dump quindi utilizzate Windbg per analizzare e infine, sfruttando il Web in modo intelligente, cercate incidenti simili al vostro: vi potranno essere molto utili per trovare una soluzione. Agendo in prima persona, potrete risparmiare tempo e denaro e avrete un elevato livello di soddisfazione da parte degli utenti.
