可以使用 HDevelop 对 HDevEngine 应用程序进行远程调试。应用程序本身必须明确启用远程调试。这将启动一个调试服务器,接受来自HDevelop的调试连接。如何从 HDevelop 连接到应用程序,请参阅 HDevelop 用户向导 。下文将从HDevEngine的角度介绍远程调试。提供的两个示例程序说明了如何在应用程序中部署调试服务器:
调试服务器通过调用 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 连接后,就可以从代码的开头开始调试。 |
HDevEngine 提供了两个成员函数,用于启动和停止调试服务器。
MyEngine.StartDebugServer(); ... MyEngine.StopDebugServer();
通常,HDevEngine 会不间断地执行 HDevelop 代码。但是,一旦调试服务器启动,HDevelop 代码的执行就会因调试目的而中断。
HDevEngine 可以通过多种方式进入停止状态。前两种方法可通过 API 使用。无论是否实际连接了HDevelop,它们都能起作用。请注意,继续执行程序的唯一方法是将 HDevelop 实际连接到调试服务器,并从那里控制执行。
MyEngine.SetEngineAttribute("debug_wait_for_connection","true");
// execution will stop on first line of HDevelop code that is executed
HDevProcedure mProcPreprocess;
HDevProcedureCall mCallPreprocess;
...
mProcPreprocess = new HDevProcedure("preprocess_nuts");
mCallPreprocess = mProcPreprocess.CreateCall();
mCallPreprocess.SetWaitForDebugConnection(true);
mCallPreprocess.Execute(); // execution will stop on first line of this call
只有当 HDevelop 连接到调试服务器时,才会触发其他停止程序执行的方法:
无论出于何种原因,停止状态始终是全局性的,也就是说,其他应用程序线程在执行 HDevelop 代码时也会停止。
与任何远程访问的服务器一样,必须注意防止未经授权访问调试服务器。虽然防火墙必须配置为允许连接到配置的端口,但您有责任限制只有授权客户才能访问。
作为最基本的安全措施,请务必为调试服务器设置密码。请注意,调试服务器本身不提供防御暴力或拒绝服务攻击的措施。
如果调试服务器正在运行且未设置密码,请注意以下事项:
除了密码的传输外,HDevelop 和调试服务器之间的通信是不加密的。受保护的函数以加密的二进制形式传输。如果担心图像等其他敏感数据,从外部连接到本地网络时应使用 VPN(如 SSH 通道)。
HDevelop 用户向导 中列出了从 HDevelop 端进行远程调试的其他限制。