Episodio

Strumenti di deframmentazione #167 - Debug dei dump di arresto anomalo della modalità utente Redux

In questo episodio di Defrag Tools, Andrew Richards e Chad Beeder usano Gli strumenti di debug per Windows (WinDbg) per determinare la causa radice di vari arresti anomali dell'applicazione che si sono verificati nel computer di Andrew. Per acquisire i dump viene usato Sysinternals ProcDump .

Durante il debug, si passa alla configurazione dei colori per i file compressi e crittografati in Esplora risorse e si usa Sysinternals Process Monitor per determinare il motivo per cui il debugger riceveva un accesso negato durante il caricamento dell'estensione del debugger PDE.

Abbiamo fatto un'indagine simile in questi due episodi:

In questo episodio viene illustrato come installare gli strumenti di debug per Windows :

Ottenere gli strumenti Sysinternals da http://www.sysinternals.com. Usiamo:

Ottenere l'estensione del debugger PDE da Defrag Tools OneDrive

Ottenere il percorso del simbolo al server dei simboli pubblici Microsoft:

Per raccogliere i dump degli arresti anomali nel proprio computer, installare ProcDump come debugger Postmortem (AeDebugger):

md c:\dumps
procdump.exe -ma -i c:\dumps

In qualsiasi dump (utente o kernel) è possibile eseguire l'analisi automatizzata per visualizzare il problema:

!analyze -v

Foglio informativo sul debug

  • c0000005 è una violazione di accesso - usare .ecxr & k
  • c000027b è un'eccezione stowed (app dello Store) - usare !pde.dse
  • e0434352 è un'eccezione CLR : usare !sos.pe
  • e0697282 è un'eccezione C++ - usare .ecxr & k
  • 80000003 è un punto di interruzione: usare !analyze -v
  • Quando si digita un numero decimale, anteporre "0n"
  • Quando si digita un numero esadecimale, anteporre "0x" (prefisso predefinito)

Comandi comuni del debugger

.exr -1

  • Visualizzare il codice di eccezione e i parametri dell'eccezione
  • Il numero è simile a C0xxxxxx e 80xxxxxx sono HRESULTs (codici di errore)
  • Numero simile a 7FFFxxxxxxxx sono in genere indirizzi di codice (assembler)

!indirizzo

  • Visualizzare le informazioni sull'indirizzo - Commited/Reserved/Free, Image/Mapped/Private
  • Usato per determinare se un numero è codice o dati.

Ln

  • Elencare l'indirizzo più vicino
  • Visualizza il simbolo in corrispondenza o vicino all'indirizzo
  • Usato per determinare se un numero è codice o dati.

.ecxr

  • Modificare il contesto di debug in base al punto dell'eccezione (anziché essere nel contesto di Segnalazione errori Windows)

r

  • Visualizzare i registri nel contesto corrente. (.ecxr produce lo stesso output)

k

  • Visualizzare lo stack di chiamate

lmvm

  • Visualizzare il modulo caricato in modo dettagliato con una maschera
  • Visualizzare i dettagli di un modulo, tra cui cartella, timestamp, descrizione, copyright, versione del prodotto/file

| (Carattere barra verticale o barra verticale)

  • Visualizzare il percorso dell'eseguibile (ad esempio c:\windows\notepad.exe)

!ext.error

  • Ottenere la descrizione di un codice di errore. Migliore nella descrizione dei codici di errore di sistema.

!pde.err

  • Ottenere la descrizione di un codice di errore. Buona descrizione di HRESULTs (80xxxxxx e C0xxxxxx)

!pde.dpx

  • Raschiare il thread corrente per l'evidenza (simboli, strutture, stringhe e così via)

.Formati

  • Visualizza il numero in vari formati.
  • Modo semplice di lavorare se un numero è effettivamente testo ASCII o una data/ora

!sos.pe

  • Visualizzare un'eccezione CLR.
  • Se è presente un'eccezione interna, fare clic sul collegamento per visualizzarlo.

.cordll -u & .cordll -l

  • Se SOS non viene caricato, provare a scaricare e caricare il supporto CLR.

!peb

  • Visualizzare il blocco dell'ambiente di elaborazione (moduli, riga di comando, variabili di ambiente e così via)

!Teb

  • Visualizzare il blocco di ambiente del thread corrente (intervallo di stack, ultimo codice di errore, ultimo codice di stato e così via)

!Gle

  • Ottieni ultimo errore
  • Visualizzare l'ultimo codice di errore e l'ultimo codice di stato del thread corrente

.Cls

  • Cancellare la schermata.

.ricaricare

  • Forzare un ricaricamento (download) dei simboli per i moduli nello stack corrente.

.reload /f

  • Forzare un ricaricamento completo (download) dei simboli per i moduli nello stack corrente.

Archiviare le applicazioni

Per visualizzare le applicazioni store attualmente installate e la relativa versione usano:

Editor del Registro di sistema (regedit.exe)

  • HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package

PowerShell