Condividi tramite


Funzione DebugActiveProcess (debugapi.h)

Consente a un debugger di connettersi a un processo attivo ed eseguirne il debug.

Sintassi

BOOL DebugActiveProcess(
  [in] DWORD dwProcessId
);

Parametri

[in] dwProcessId

Identificatore del processo di cui eseguire il debug. Al debugger viene concesso l'accesso di debug al processo come se creasse il processo con il flag di DEBUG_ONLY_THIS_PROCESS . Per altre informazioni, vedere la sezione Osservazioni di questo argomento.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è 0 (zero). Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Per arrestare il debug del processo, è necessario uscire dal processo o chiamare la funzione DebugActiveProcessStop . L'uscita dal debugger esce anche dal processo, a meno che non si usi la funzione DebugSetProcessKillOnExit .

Il debugger deve disporre dell'accesso appropriato al processo di destinazione e deve essere in grado di aprire il processo per PROCESS_ALL_ACCESS. DebugActiveProcess può avere esito negativo se il processo di destinazione viene creato con un descrittore di sicurezza che concede al debugger qualsiasi valore inferiore all'accesso completo. Se il processo di debug dispone del privilegio SE_DEBUG_NAME concesso e abilitato, può eseguire il debug di qualsiasi processo.

Dopo che il sistema controlla l'identificatore del processo e determina che viene eseguito un allegato di debug valido, la funzione restituisce TRUE. È quindi previsto che il debugger attenda gli eventi di debug usando la funzione WaitForDebugEvent . Il sistema sospende tutti i thread nel processo e invia gli eventi del debugger che rappresentano lo stato corrente del processo.

Il sistema invia al debugger un singolo evento di debug CREATE_PROCESS_DEBUG_EVENT che rappresenta il processo specificato dal parametro dwProcessId . Il membro lpStartAddress della struttura CREATE_PROCESS_DEBUG_INFO è NULL.

Per ogni thread che fa attualmente parte del processo, il sistema invia un evento di debug CREATE_THREAD_DEBUG_EVENT . Il membro lpStartAddress della struttura CREATE_THREAD_DEBUG_INFO è NULL.

Per ogni libreria a collegamento dinamico (DLL) attualmente caricata nello spazio indirizzi del processo di destinazione, il sistema invia un evento di debug LOAD_DLL_DEBUG_EVENT . Il sistema dispone il primo thread nel processo per eseguire un'istruzione del punto di interruzione dopo la ripresa. Se si continua questo thread, si torna a eseguire la stessa operazione di prima che il debugger sia collegato.

Al termine di questa operazione, il sistema riprende tutti i thread nel processo. Quando il primo thread del processo viene ripreso, esegue un'istruzione del punto di interruzione che causa l'invio di un evento di debug EXCEPTION_DEBUG_EVENT al debugger. Tutti gli eventi di debug futuri vengono inviati al debugger usando il normale meccanismo e le regole.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione debugapi.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CREATE_PROCESS_DEBUG_INFO

CREATE_THREAD_DEBUG_INFO

CreateProcess

DebugActiveProcessStop

Funzioni di debug

Debug di un processo in esecuzione

WaitForDebugEvent