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)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CREATE_PROCESS_DEBUG_INFO

CREATE_THREAD_DEBUG_INFO

CreateProcess

DebugActiveProcessStop

调试函数

调试正在运行的进程

WaitForDebugEvent