文章 "调试 MQL5 程序"

 

新文章 调试 MQL5 程序已发布:

本文主要针对那些已经学过这种语言、但又没有完全掌握该语言开发的程序员。文中给出一些调试技巧,并介绍作者与众多其他程序人员的经验。

调试是程序开发过程中的一个阶段,旨在检查并移除程序执行错误。在调试过程中,程序员会对应用程序实施分析,尝试找出其潜在问题。而待分析数据,则是通过观察变量和程序执行(被调用的函数和时机)而来。

有两种互为补充的调试技术:

  • 采用调试程序 - 呈现所开发程序逐步执行的实用工具。
  • “状态和函数”调用变量在屏幕、日志或文件中的交互显示。

Debugging process - viewing variable values

作者:Nikolay Demko

 

这本身并不坏。但是

1.对断言(assertions)只字未提,而断言在调试时可是大有帮助。

2. 至少可以说,跟踪器是有争议的。

3.应该提到的是,由于(编译器的)优化,调试简单函数时会因为内联而变得非常困难,建议采用一些方法来规避这一缺点。

 
TheXpert:

这本身并不坏。但是

1.对断言(assertions)只字未提,而断言在调试时可是大有帮助。

2. 至少可以说,跟踪器是有争议的。

3.应该提到的是,由于优化(编译器)和内联,调试简单函数是非常困难的,并建议如何解决这一缺点。

我会考虑第 1 和第 3 点(也许我还会最终完成这篇文章),每个人都有很多自己的方法,但建议进行跟踪(或者干脆插入链接,已经有很多建议了)。
 
TheXpert:

3. 有必要提及的是,由于优化(编译器)的原因,简单函数的调试因内联而变得非常困难,并建议如何克服这一缺点。

在调试器中,内联是完全禁用的,并且完全按源代码进行演练。

在上一版的剖析器中,检查点存在问题,导致报告质量下降,但这一问题已得到解决,在下周的下一版中,新版本将提供更详细的报告。

 

但这里写的从根本上就是错误的:

Хочу отдельно отметить, что компилятор MetaEditor транслирует программы в байт-код, а не нативный код (подробнее читаем по ссылке). Это дает возможность создавать защищенные шифрованием программы, не боясь взлома. Также преимуществом такой трансляции является то, что байт-код может быть запущен как в 32-х битной версии операционной системы, так и в 64-х битной.

在编译的第一阶段,会存储一个通用字节码,但在终端执行时,这个字节码会完全 100% 转换为本地 32 或 64 位代码,并进行额外的优化。正是由于翻译成了本地代码,MQL5 程序 的执行速度比 MQL4 提高了数倍。

在 MQL4 中,纯粹的字节码没有翻译成本地代码。

 
Renat:

在调试器中,内联完全被禁用,演练完全在源代码上进行。

这样的情况有多久了?这曾经是个大问题。我使用 5ka 已经有一段时间了。
 
TheXpert:
这样的情况有多久了?以前是个大问题我已经很久没在 5KA 工作了

从一开始就这样。

Inlining 吞噬了大部分函数,即使从理论上讲,也根本不可能用它来调试。也许你使用的只是最初版本的调试器,其中存在很多问题。

 

在除草过程中或在不与市场连接的情况下进行调试?您有解决方案吗?因为在调试器的 "OnTick "之后有一个问题,在 MT4 上有一个"Tick 生成器",在 MT5 上有类似的东西吗?

在此先表示感谢、

 
Bisemper:

在除草过程中或在不与市场连接的情况下进行调试?您有解决方案吗?因为在调试器的 "OnTick "之后有一个问题,在 MT4 上有一个 "Tick 生成器",在 MT5 上有类似的东西吗?

在此先表示感谢、

我们可以就此建立联系;-)
 

由于报价到达和所需图表部分的过程较长,我几乎不使用实时 otaldka。

我不得不用老方法进行打印,并在测试器中进行监控。

不过,本地调试器在Visual Studio之前根本无法使用。你指向一个变量,它就会给出一个值;指向一个表达式,比如 a+b /s,结果就会弹出来。在 ME 中,使用 Print 更简单。

 

我们完成 MT4 升级后,一定会尽快改进调试器。