直接附加到程序
用户通常遵循以下过程调试已运行的进程中的程序:
在 IDE 中,打开“调试”菜单,然后选择“附加到进程...”命令。
此时显示“附加到进程”对话框,其中列出计算机上安装的所有调试引擎 (DE)。
指定要用于调试所选进程的 DE,选择一个进程,然后单击“附加”按钮。
调试包启动调试会话,并向其传递 DE 列表。 调试会话又将此列表以及回调函数传递到所选进程,然后要求进程枚举其正在运行的程序。
以编程方式响应用户请求,调试包实例化会话调试管理器 (SDM),并向其传递所选 DE 列表。 除了列表,调试包还向 SDM 传递 IDebugEventCallback2 接口。 调试包通过调用 IDebugProcess2::Attach 将 DE 列表传递到所选进程。 然后,SDM 在端口上调用 IDebugProcess2::EnumPrograms 以枚举进程中运行的程序。
从此时起,每个调试引擎都按照启动后附加中的详细说明附加到程序,但有两个例外。
为了提高效率,对与 SDM 共享地址空间实现的 DE 进行分组,以便每个 DE 都有一组可附加到的程序。 在这种情况下,IDebugProcess2 会调用 IDebugEngine2::Attach,并向其传递一组要附加到的程序。
第二种例外情况是,由附加到已运行程序的 DE 发送的启动事件通常不包括入口点事件。