Debug di un processo in modalità utente tramite CDB

È possibile usare CDB per collegarsi a un processo in esecuzione o per generare e collegare a un nuovo processo.

Collegamento a un processo in esecuzione

Prompt

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

  • cdb -p ProcessID
  • cdb -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 cdB.

Finestra di comando CDB

Se il debugger sta già eseguendo il debug di uno o più processi, è possibile collegarsi a un processo in esecuzione usando il comando attach (Attach to Process).

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.

Prompt

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.

Finestra di comando CDB

Se il debugger è già attivo, è possibile eseguire il debug in modo non invasivo di un processo in esecuzione immettendo il comando .attach -v (Attach to Process).

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

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

CDB 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.

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

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

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

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.