客户端对象

几乎所有与调试器引擎的交互都是通过客户端对象(通常简称为客户端)进行的。 每个客户端都提供一个顶级引擎接口的实现。 每个接口都会提供一组不同的方法,用于与引擎以及通过引擎与目标进行交互。 一个引擎实例可以有很多客户端,而每个客户端都有自己的状态。

主客户端

主客户端是指已加入当前调试会话的客户端。 最初,在创建新客户端对象时,它并不是主客户端。 当客户端用于获取目标(例如,通过调用 CreateProcess2)或使用 ConnectSession 连接到调试会话时,它就会成为主客户端。 调试器命令 .clients 只会列出主客户端。

回调对象

每个客户端都可以注册回调对象。 回调对象有三种类型:

  1. 输入回调对象(或输入回调):引擎调用输入回调来请求输入。 例如,带有控制台窗口的调试器可以注册一个输入回调,向引擎提供来自用户的输入;或者调试器也可以注册一个输入回调,向引擎提供来自文件的输入。

  2. 输出回调对象(或输出回调):引擎调用输出回调来显示输出。 例如,带有控制台窗口的调试器可以注册一个输出回调,将调试器的输出显示给用户;或者调试器也可以注册一个输出回调,将输出发送到日志文件。

  3. 事件回调对象(或事件回调):每当目标中发生事件(或引擎状态发生变化)时,引擎都会调用事件回调。 例如,调试器扩展库可以注册一个事件回调来监控某些事件,或在特定事件发生时执行自动操作。

远程调试

客户端对象有助于与主机引擎的远程实例进行通信。 DebugConnect 函数创建了一个连接到远程引擎实例的客户端对象;远程引擎将执行在该客户端上调用的方法,并且当远程引擎进行回调调用时,将调用在客户端本地注册的回调对象。

其他信息

有关创建和使用客户端对象的详细信息,请参阅使用回调对象。 有关注册回调对象的详细信息,请参阅“使用回调对象”。