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 |