MetaEditor 帮助开发程序代码调试

代码调试

MetaEditor 拥有一个内置的调试器,允许您单步执行 (各个函数) 以便检验程序。 在代码中放置断点。 这些是应该暂停程序执行的地方。 然后在常规图表或 策略测试器 中启动程序。 一旦程序到达断点,它就会暂停。 这允许您查看计算变量的值,然后继续单步执行程序检查算法。

预设 #

调试之前,在 MetaEditor 设置 中为常规参数设定。 您可以指定一个品种和图表周期,应用程序会在该图表调试。 每次开始调试时会临时创建这种图表,并在完成后立即将其删除。

位于交易平台的 /profiles/templates 文件夹中的 debug.tpl 模板将被应用于调试图表。

断点 #

断点 是程序执行到达指定字符串时触发的命令。 该命令停止该字符串的执行。 断点允许检查指定代码区域中的程序行为: 查看变量值和函数堆栈。 随后,调试过程可以恢复或终止。</ t1>

在启动调试之前,在程序代码中至少设置一个断点。 为此,请双击代码行左侧的灰色区域。 您也可以将光标放在行上并单击切换断点 位于 调试 菜单里的切换断点,或按 F9。 断点也以同样的方式禁用。

启用断点

如果您需要跳转到程序停止执行的位置,请在调用堆栈查看窗口中双击函数。 还有,使用窗口关联菜单,可以打开当前调试程序中所有断点的列表:

跳至断点

通过双击,您可以跳转到任何断点。

启动调试 #

若要运行调试, 请打开 程序主体文件 或一个 项目调试可按照两种模式执行:

  • 依据真实数据。 调试启动依据真实数据开始/恢复调试 位于 调试 菜单里的依据真实数据开始命令,或按 F5。 在此模式, 调试程序运行在交易平台的 特殊图表 上。 使用来自服务器的价格数据在实际条件下执行调试。
  • 依据历史数据。 调试启动依据历史数据开始 位于 调试 菜单里的依据历史数据开始命令,或按 Ctrl+F5。 这个模式下的程序会在策略测试中启用。使用它以任何期望的历史间隔测试程序性能,无需等待特定的市场条件。默认情况下使用非可视化测试模式,以避免在渲染图形元素时使用额外的资源。必要情况下,您可以在MetaEditor设置中启用可视化模式。

一旦程序在调试模式下执行到达断点,它就会暂停。 暂停执行的行被标记为触发断点 图标。 调试 选卡也出现在工具箱窗口中。 它的左边部分显示函数 调用堆栈

启动调试后触发断点

观察表达式 #

在调试过程中,可以在当前程序执行步骤中跟踪各种表达式 (变量) 的值。 工具箱窗口的 调试 选卡右侧显示相应的结果。 若要跟踪表达式数值,请将其添加到观察值中:

  • 在调试过程中,将光标置于源代码中的表达式上,然后单击添加关注在关联菜单中添加观察。
  • 点击添加在调试选项卡右侧的关联菜单中添加。 在新出现的行中输入表达式名称。
  • 若要更改所跟踪表达式的名称,请双击它。

查看堆栈和表达式值

您还可以在调试器观察列表中启用自动显示局部变量。可以通过快捷菜单的“本地”命令启用此显示。随着调试器操作在代码中进行,当前作用域中的变量会自动显示在列表中。

在表达式观察窗口中,可以执行简单的数学计算 (加、减、乘、除),也可以查看指定数组下标处的值,例如指定A[3][4] 项,其中 A 是一个数组名称,而 3 和 4 是其维度中的位置。 将对象添加到所观察的表达式时,我们可以在末尾指定完全停止,或单击 Ctrl+空格来查看其成员的列表:

插入对象成员

要查看任何数组或对象的内容,请在观察窗口双击该数组或对象。

默认情况下,整数以十进制形式显示在观察窗口中。 若要以二进制或十六进制形式显示值,请在表达式字段中相应地指定逗号分隔的 b 或 x 修饰符。

以二进制和十六进制形式查看表达式

查看调用堆栈 #

从子程序 (嵌套函数) 向程序 (主事件处理程序 OnInit,OnTick 等) 返回控制的数据要在调用堆栈中指定。 该堆栈允许您跟踪 交易平台中事件发生 的整个顺序,直到调用指定函数。

每个函数都显示以下数据:

  • 发起函数调用的文件名。
  • 函数名称。
  • 文件中调用该函数的行号。

单步调试

调试 菜单或 标准 工具栏命令用于单步调试,并具有查看调用堆栈的能力:

  • 步进 步进 ― 程序执行前移一步并进入被调用函数。 与按 F11 键执行相同的动作。
  • 步跃 步跃 ― 程序执行前移一步但不进入被调用函数。 与按 F10 键执行相同的动作。
  • 退出 步出 ― 单步执行高一级程序。 与按 Shift+F11 键执行相同的动作。

仅当程序在调试模式下暂停后,才能使用单步调试命令:

  • 触发断点后。
  • 程序被手动暂停后暂停 位于 调试 菜单里的暂停命令,或按 Break。

事件继续发生 在交易平台里 即使程序处于断点。 所有发生的事件都放入一个队列中,在当前事件处理程序退出代码后继续使用智能系统进行处理。

暂停,恢复并结束调试 #

一旦执行抵达带有断点的字符串,程序就会在调试过程中自动停止。 调试也可以手动管理:

  • 暂停执行
    调试过程中的程序执行可以手动暂停,这是通过使用暂停 位于 调试 菜单里的暂停命令,或按 Break。 暂停后,您可以应用单步调试命令。
  • 恢复执行
    若要在暂停后恢复程序执行,请单击恢复 位于 调试 菜单里的恢复,或按 F5。
  • 完成调试
    若要停止调试, 点击 停止 位于 调试 菜单里的停止,或按 Shift+F5。 该程序将从启动调试时所加载的 特别图表 中删除,而图表本身也被关闭。
  • 没有源 MQ4、MQ5 和 MQH 文件,调试是不可能的。
  • 不建议分发调试过程中得到的可执行 EX4/EX5 文件。

依据历史数据调试 #

除了实时价格数据外,交易机器人和技术指标的调试也可以依据历史数据进行。 任何程序都可以根据所需的历史数据进行测试,而无需实时等待某些交易事件。

依据历史数据调试在策略测试器中以可视化测试模式运行。 基于测试器中模拟的时间序列,或累积的历史逐笔报价 (从经纪商收到),在图表上执行应用程序。

若要开始依据历史数据调试, 在 MetaEditor 设置 中设置测试参数。

配置依据历史数据调试

在代码中设置断点,然后使用历史价格开始调试。

启动依据历史数据调试

这将启动可视化测试和调试过程。

依据历史数据调试