記事"MQL5 プログラムのデバッグ"についてのディスカッション

 

新しい記事 MQL5 プログラムのデバッグ はパブリッシュされました:

本稿は第一にすでに言語を学習したがまだプログラム開発を完全にはマスターしていないプログラマーを対象としています。本稿ではいくつかデバッグテクニックを提供し、著者やその他多くのプログラマーの経験を紹介します。

デバッグ とはプログラム実行エラーを検出し取り除くためのプログラム開発段階です。デバッグ処理中開発者は発生可能な問題を検出しようとアプリケーションを解析します。解析用データは変数を観察することとプログラムを実行することで入手されます(どの関数がいつ呼ばれるか)。

補間的なデバッグテクノロジーには2とおりあります。

  • デバッガの利用-開発されたプログラムの実行を手順を踏んで表示するユーティリティ
  • ジャーナルまたはファイル内の変数状態と関数の反復の画面上のインタラクティブディスプレイです。

図4 デバッグプロセス-変数値の閲覧

デバッグプロセス変数値の閲覧

作者: Nikolay Demko

 

それ自体は悪くない。しかし

1.デバッグ時に大助かりのアサーション(自己主張)については一言もない。

2.トレーサーについては、控えめに言っても賛否両論ある。

3.(コンパイラの)最適化により、単純な関数ではインライン化のためにデバッグが非常に困難になることに言及し、この欠点を回避する方法を提案すべきである。

 
TheXpert:

それ自体は悪くない。しかし

1.デバッグ時に大助かりのアサーション(自己主張)については一言もない。

2.トレーサーについては、控えめに言っても賛否両論ある。

3.最適化(コンパイラ)のせいで、単純な関数ではインライン化によりデバッグが非常に困難であることに言及し、この欠点を回避する方法を提案すべきである。

私は1と3について考えるつもりだ(もしかしたら記事を最終的にまとめるかもしれない)。誰もが自分自身の方法をたくさん持っているが、トレースを提案する(というかリンクを挿入するだけで、すでに多くの提案がある)。
 
TheXpert:

3.最適化(コンパイラ)のために、インライン化のために単純な関数のデバッグが非常に困難であることに言及し、この欠点を回避する方法を提案する必要がある。

デバッガでは、インライン化は完全に無効化されており、ウォークスルーは完全にソースコードそのままです。

前回のビルドのプロファイラーでは、チェックポイントの問題があり、レポートの質が低下していましたが、修正され、来週の次のビルドでは、より詳細なレポートを持つ新しいバージョンが利用できるようになります。

 

しかし、ここに書かれていることは根本的に間違っている:

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

コンパイルの最初の段階では、ユニバーサル・バイトコードが格納されているが、ターミナルで実行されるときには、このバイトコードは100%ネイティブの32ビットまたは64ビットのコードに変換され、さらに最適化される。MQL5プログラムの 実行速度をMQL4と比較して倍増させたのは、ネイティブコードへの変換によるものです。

ネイティブ・コードへの翻訳がない純粋なバイトコードはMQL4にありました。

 
Renat:

デバッガーでは、インラインは完全に無効化され、ウォークスルーは完全にソースコードそのままだ。

いつからこうなんだ?以前は大きな問題だった。ただ、5kaで仕事をするようになってからかなり時間が経っている。
 
TheXpert:
いつからこうなんだ?以前は大きな問題だった。ただ、5kmで働くようになってからかなり経つ。

最初の頃からだ。

インラインは関数のほとんどを食ってしまうから、理論的にもデバッグはまったく不可能だ。もしかしたら、多くの問題があったデバッガーの最初のバージョンを使っていただけかもしれない。

 

また、ウィード終了時のデバッグのため、あるいは市場との接続がない場合のデバッグのため?解決策はありますか?デバッガーの "OnTick "の後に問題があるので、MT4には"Tick generator"がありますが、mt5にはこのようなものがありますか?

ありがとうございました、

 
Bisemper:

また、ウィード終了時のデバッグのため、あるいは市場との接続がない場合のデバッグのため?解決策はありますか?デバッガーの "OnTick "の後に問題があるので、MT4には "Tick generator "がありますが、mt5にはこのようなものがありますか?

ありがとうございます、

私たちはそれについて関連づける ことができます;-)
 

リアルタイムオタルドカは、気配値の到着に時間がかかるのと、チャート部分が必要なので、実質的には使っていません。

旧来の方法でプリントを 突っ込んで、テスターでモニターするしかない。

それにしても、ローカルデバッガはVisual Studioより全然先に離陸しない。変数をポイントすると値が表示され、a+b /sのような式をポイントすると結果がポップアップします。MEではPrintを使う方が簡単だ。

 

MT4のアップグレードが終わり次第、デバッガーを必ず改善します。