Debug di un processo in modalità utente con WinDbg Classic

È possibile usare WinDbg per connettersi a un processo in esecuzione o per generare e collegare un nuovo processo.

Collegamento a un processo in esecuzione

Esistono diversi modi per usare WinDbg per connettersi a un processo in esecuzione. Indipendentemente dal metodo scelto, sarà necessario l'ID processo o il nome del processo. L'ID del processo è un numero assegnato dal sistema operativo. Per altre informazioni su come determinare l'ID processo e il nome del processo, vedere Ricerca dell'ID processo.

WinDbg Menu

Quando WinDbg è in modalità inattiva, è possibile collegarsi a un processo in esecuzione scegliendo Collega a un processo dal menu File o premendo F6.

Nella finestra di dialogo Connetti a processo selezionare il processo di cui si vuole eseguire il debug e selezionare OK.

Prompt dei comandi

In una finestra del prompt dei comandi è possibile collegarsi a un processo in esecuzione quando si avvia WinDbg. Usare uno di questi comandi:

  • windbg -p ProcessID
  • windbg -pn ProcessName

dove ProcessID è l'ID processo di un processo in esecuzione o ProcessName è il nome di un processo in esecuzione.

Per altre informazioni sulla sintassi della riga di comando, vedere Opzioni della riga di comando di WinDbg.

Finestra di comando del debugger

Se WinDbg sta già eseguendo il debug di uno o più processi, è possibile collegarsi a un processo in esecuzione usando il comando attach (Connetti a processo) nella finestra Comando debugger.

Il debugger avvia sempre più processi di destinazione contemporaneamente, a meno che alcuni thread non vengano bloccati o sospesi.

Se il comando .attach ha esito positivo, il debugger si connette al processo specificato alla successiva esecuzione del debugger. Se si usa questo comando più volte in una riga, l'esecuzione deve essere richiesta dal debugger quante volte si usa questo comando.

Connessione a un processo in esecuzione in modo non invasivo

Se si vuole eseguire il debug di un processo in esecuzione e interferire solo in modo minimo nell'esecuzione, è consigliabile eseguire il debug del processo in modo non invasivo.

WinDbg Menu

Quando WinDbg è in modalità inattiva, è possibile eseguire il debug non invasivo di un processo in esecuzione scegliendo Connetti a un processo dal menu File o premendo F6.

Quando viene visualizzata la finestra di dialogo Connetti a processo , selezionare la casella di controllo Non invasive . Selezionare quindi la riga contenente l'ID processo e il nome desiderati. È anche possibile immettere l'ID del processo in Casella ID processo. Infine, selezionare OK.

Prompt dei comandi

In una finestra del prompt dei comandi è possibile collegarsi a un processo in esecuzione in modo non invasivo quando si avvia WinDbg. Usare uno di questi comandi:

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

Sono disponibili diverse altre opzioni utili della riga di comando. Per altre informazioni sulla sintassi della riga di comando, vedere Opzioni della riga di comando di WinDbg.

Finestra di comando del debugger

Se il debugger è già attivo, è possibile eseguire il debug non in modo non invasivo di un processo in esecuzione usando il comando .attach -v (Connetti a processo) nella finestra Comando debugger.

È possibile usare il comando .attach se il debugger sta già eseguendo il debug di uno o più processi in modo invasivo. Non è possibile usare questo comando se WinDbg è inattivo.

Se il comando .attach -v ha esito positivo, il debugger esegue il debug del processo specificato la volta successiva che il debugger emette un comando di esecuzione. Poiché l'esecuzione non è consentita durante il debug non invasivo, il debugger non può eseguire il debug in modo non invasivo di più processi alla volta. Questa restrizione significa anche che l'uso del comando .attach -v potrebbe rendere meno utile una sessione di debug invasiva esistente.

Generazione di un nuovo processo

WinDbg può avviare un'applicazione in modalità utente e quindi eseguire il debug dell'applicazione. L'applicazione viene specificata in base al nome. Il debugger può anche collegarsi automaticamente ai processi figlio (processi aggiuntivi avviati dal processo di destinazione originale).

I processi creati dal debugger (noti anche come processi generati) si comportano in modo leggermente diverso rispetto ai processi che il debugger non crea.

Anziché usare l'API heap standard, i processi creati dal debugger usano un heap di debug speciale. È possibile forzare un processo generato per usare l'heap standard anziché l'heap di debug usando la variabile di ambiente _NO_DEBUG_HEAP o l'opzione della riga di comando -hd.

Inoltre, poiché l'applicazione di destinazione è un processo figlio del debugger, eredita le autorizzazioni del debugger. Questa autorizzazione potrebbe consentire all'applicazione di destinazione di eseguire determinate azioni che non è stato possibile eseguire in altro modo. Ad esempio, l'applicazione di destinazione potrebbe essere in grado di influire sui processi protetti.

WinDbg Menu

Quando WinDbg è in modalità inattiva, è possibile generare un nuovo processo scegliendo Apri eseguibile dal menu File o premendo CTRL+E.

Quando viene visualizzata la finestra di dialogo Apri eseguibile, immettere il percorso completo del file eseguibile nella casella Nome file oppure usare l'elenco Cerca in per selezionare il percorso e il nome file desiderati.

Se si vogliono usare parametri della riga di comando con l'applicazione in modalità utente, immetterli nella casella Argomenti . Se si vuole modificare la directory iniziale dalla directory predefinita, immettere il percorso della directory nella casella Directory iniziale . Se si vuole che WinDbg si connetti ai processi figlio, selezionare anche la casella di controllo Debug processi figlio.

Dopo aver effettuato le selezioni, selezionare Apri.

Prompt dei comandi

In una finestra del prompt dei comandi è possibile generare un nuovo processo quando si avvia WinDbg. Utilizza il seguente comando:

windbg [-o] ProgramName [Arguments]

L'opzione -o determina il collegamento del debugger ai processi figlio. Sono disponibili diverse altre opzioni utili della riga di comando. Per altre informazioni sulla sintassi della riga di comando, vedere Opzioni della riga di comando di WinDbg.

Finestra di comando del debugger

Se WinDbg sta già eseguendo il debug di uno o più processi, è possibile creare un nuovo processo usando il comando .create (Crea processo) nella finestra Comando debugger.

Il debugger avvierà sempre più processi di destinazione contemporaneamente, a meno che alcuni thread non siano bloccati o sospesi.

Se il comando .create ha esito positivo, il debugger crea il processo specificato alla successiva esecuzione del debugger. Se si usa questo comando più volte in una riga, l'esecuzione deve essere richiesta dal debugger quante volte si usa questo comando.

È possibile controllare la directory iniziale dell'applicazione usando il comando .createdir (Set Created Process Directory) prima di .create. È possibile usare il comando .createdir -I o l'opzione della riga di comando -noinh per controllare se l'applicazione di destinazione eredita gli handle del debugger.

È possibile attivare o disattivare il debug dei processi figlio usando il comando childdbg (Debug processi figlio).

Ricollegamento a un processo

Se il debugger smette di rispondere o si blocca, è possibile collegare un nuovo debugger al processo di destinazione. Per altre informazioni su come collegare un debugger in questa situazione, vedere Ricollegamento all'applicazione di destinazione.