Condividi tramite


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 -pProcessID

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 -pnProcessName

Sono disponibili diverse altre opzioni utili della riga di comando. Per altre informazioni sulla sintassi della riga di comando, vedere opzioni Command-Line 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 -pProcessID

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 -pnProcessName

Sono disponibili diverse altre opzioni utili della riga di comando. Per altre informazioni sulla sintassi della riga di comando, vedere Opzioni Command-Line 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 Aggancia a processo, selezionare la casella di controllo Noninvasive. 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 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 eseguirà il debug del processo specificato la prossima volta che il debugger emetterà 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.