Share via


DebugActiveProcess 函式 (debugapi.h)

可讓調試程式附加至使用中的進程並對其進行偵錯。

語法

BOOL DebugActiveProcess(
  [in] DWORD dwProcessId
);

參數

[in] dwProcessId

要偵錯之進程的標識碼。 調試程式會授與對進程的偵錯存取權,就像使用 DEBUG_ONLY_THIS_PROCESS 旗標建立進程一樣。 如需詳細資訊,請參閱本主題的一節。

傳回值

如果函式成功,則傳回非零的值。

如果函式失敗,傳回值為 0 (零) 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

若要停止對進程進行偵錯,您必須結束進程或呼叫 DebugActiveProcessStop 函式。 除非您使用 DebugSetProcessKillOnExit 函式,否則結束調試程式也會結束進程。

調試程式必須具有目標進程的適當存取權,而且必須能夠開啟 PROCESS_ALL_ACCESS的進程。 如果目標進程是以安全性描述元建立,而授與調試程式小於完整存取權的安全性描述項,DebugActiveProcess 可能會失敗。 如果偵錯進程已授 與並啟用SE_DEBUG_NAME 許可權,它可以偵錯任何進程。

在系統檢查進程標識碼並判斷正在建立有效的偵錯附件之後,函式會傳回 TRUE。 然後,調試程式應該使用 WaitForDebugEvent 函式來等候偵錯事件。 系統會暫停進程中的所有線程,並傳送代表進程目前狀態的調試程式事件。

系統會傳送單一 CREATE_PROCESS_DEBUG_EVENT 偵錯事件給調試程式,此事件代表 dwProcessId 參數所指定的進程。 CREATE_PROCESS_DEBUG_INFO 結構的 lpStartAddress 成員為 NULL

對於目前屬於進程的每個線程,系統會傳送 CREATE_THREAD_DEBUG_EVENT偵 錯事件。 CREATE_THREAD_DEBUG_INFO 結構的 lpStartAddress 成員是 NULL

對於目前載入目標進程位址空間的每個動態連結庫 (DLL) ,系統會傳送 LOAD_DLL_DEBUG_EVENT偵 錯事件。 系統會排列進程中的第一個線程,以在繼續之後執行斷點指令。 繼續此線程會導致它返回執行與附加調試程式之前相同的動作。

完成所有作業之後,系統會繼續處理中的所有線程。 當進程的第一個線程繼續執行時,它會執行斷點指令,讓 EXCEPTION_DEBUG_EVENT 偵錯事件傳送至調試程式。 所有未來的偵錯事件都會使用一般機制和規則傳送至調試程式。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 debugapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CREATE_PROCESS_DEBUG_INFO

CREATE_THREAD_DEBUG_INFO

CreateProcess

DebugActiveProcessStop

偵錯函式

偵錯執行中的進程

WaitForDebugEvent