Debug non invasivo (modalità utente)

Se un'applicazione in modalità utente è già in esecuzione, il debugger può eseguirne il debug in modo non invasivo. Con il debug non invasivo, non sono disponibili tutte le azioni di debug. Tuttavia, è possibile ridurre al minimo l'interferenza del debugger con l'applicazione di destinazione. Il debug non invasivo è utile se l'applicazione di destinazione ha smesso di rispondere.

Nel debug non invasivo, il debugger non è effettivamente collegato all'applicazione di destinazione. Il debugger sospende tutti i thread della destinazione e ha accesso alla memoria, ai registri e ad altre informazioni di questo tipo. Tuttavia, il debugger non può controllare la destinazione, quindi i comandi come g (Go) non funzionano.

Se si tenta di eseguire comandi non consentiti durante il debug non invasivo, viene visualizzato un messaggio di errore che indica che il debugger non è collegato, quindi non è possibile monitorare l'esecuzione del processo.

Selezione del processo di debug

È possibile specificare l'applicazione di destinazione in base all'ID processo (PID) o al nome del processo.

Se si specifica l'applicazione in base al nome, è necessario usare il nome completo del processo, inclusa l'estensione del nome file. Se due processi hanno lo stesso nome, è necessario usare invece l'ID processo.

Per altre informazioni su come determinare l'ID processo e il nome del processo, vedere Ricerca dell'ID processo.

Per informazioni sull'avvio e l'arresto di una sessione di debug non invasiva, vedere gli argomenti seguenti:

Riga di comando cdb

Per eseguire il debug non invasivo di un processo in esecuzione dalla riga di comando di CDB, specificare l'opzione -pv, l'opzione -p e l'ID processo nella sintassi seguente.

cdb -pv -p ProcessID

In alternativa, per eseguire il debug non invasivo di un processo in esecuzione specificando il nome del processo, usare invece la sintassi seguente.

cdb -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 cdB.

Riga di comando di WinDbg

Per eseguire il debug non invasivo di un processo in esecuzione dalla riga di comando di WinDbg, specificare l'opzione -pv, l'opzione -p e l'ID processo nella sintassi seguente.

windbg -pv -p ProcessID

In alternativa, per eseguire il debug non invasivo di un processo in esecuzione specificando il nome del processo, usare invece la sintassi seguente.

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.

WinDbg Menu

Quando WinDbg è in modalità inattiva, è possibile eseguire il debug non invasivo di un processo in esecuzione facendo clic su Collega 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 processo nella casella ID processo. Infine, fare clic su OK.

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. È possibile usare questo comando in CDB se è inattivo, ma non in un 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.

Inizio della sessione di debug

Per altre informazioni su come iniziare una sessione di debug, vedere Operazione del debugger.