25.2 从 HDevelop 调试 HDevEngine

可以使用 HDevelop 对 HDevEngine 应用程序进行远程调试。应用程序本身必须明确启用远程调试。这将启动一个调试服务器,接受来自HDevelop的调试连接。如何从 HDevelop 连接到应用程序,请参阅 HDevelop 用户向导 。下文将从HDevEngine的角度介绍远程调试。提供的两个示例程序说明了如何在应用程序中部署调试服务器:

25.2.1 配置调试服务器

调试服务器通过调用 HDevEngine::SetEngineAttribute 进行配置。建议在启动调试服务器之前对其进行设置。例如,设置密码:

private HDevEngine MyEngine = new HDevEngine();
MyEngine.SetEngineAttribute("debug_password", "mysecretpassword");

支持以下属性

属性 默认值 描述

debug_port 57786 指定调试服务器等待传入连接的套接字端口号。
debug_password "" 指定密码是防止滥用的基本保护措施。出于安全考虑,强烈建议始终提供密码。如果设置了密码,则必须在 HDevelop 中输入密码才能允许连接。
debug_wait_for_connection false 如果为 "true",引擎会在启动调试服务器后切换到 "停止状态"(见下文)。其效果是,任何通过 HDevEngine 进入程序执行的应用程序线程都将在第一行脚本代码时停止。这样,从 HDevelop 连接后,就可以从代码的开头开始调试。

25.2.2 控制调试服务器

HDevEngine 提供了两个成员函数,用于启动和停止调试服务器。

MyEngine.StartDebugServer();
...
MyEngine.StopDebugServer();

通常,HDevEngine 会不间断地执行 HDevelop 代码。但是,一旦调试服务器启动,HDevelop 代码的执行就会因调试目的而中断。

HDevEngine 可以通过多种方式进入停止状态。前两种方法可通过 API 使用。无论是否实际连接了HDevelop,它们都能起作用。请注意,继续执行程序的唯一方法是将 HDevelop 实际连接到调试服务器,并从那里控制执行。

只有当 HDevelop 连接到调试服务器时,才会触发其他停止程序执行的方法:

无论出于何种原因,停止状态始终是全局性的,也就是说,其他应用程序线程在执行 HDevelop 代码时也会停止。

25.2.3 安全影响

与任何远程访问的服务器一样,必须注意防止未经授权访问调试服务器。虽然防火墙必须配置为允许连接到配置的端口,但您有责任限制只有授权客户才能访问。

作为最基本的安全措施,请务必为调试服务器设置密码。请注意,调试服务器本身不提供防御暴力或拒绝服务攻击的措施。

如果调试服务器正在运行且未设置密码,请注意以下事项:

除了密码的传输外,HDevelop 和调试服务器之间的通信是不加密的。受保护的函数以加密的二进制形式传输。如果担心图像等其他敏感数据,从外部连接到本地网络时应使用 VPN(如 SSH 通道)。

25.2.4 限制

HDevelop 用户向导 中列出了从 HDevelop 端进行远程调试的其他限制。