MetaEditorヘルプ

デバッグ

非常に複雑なプログラムを書くときのエラーの排除は大変厳しいことです。MetaEditorは、この問題の解決を支援するビルトインデバッガーを提供します。アプリケーションのデバッグは、ステップバイステップのプログラム実行、ローカル変数の計算、ブレークポイントのプリセッティングで構成されます。

デバッグをスタートするには、プロジェクトのメインファイル(*.MQ4 または *.MQ5)がアクティブでなければなりません。インクルードファイル(*.MQH)をデバッグするには、それらがインクルードされるファイルをデバッギングしなければなりません。

続けてデバッギングプロセスを詳細に説明しましょう。

プリセット

プログラムデバッギングの前に、MetaEditorオプションウィンドウの「デバッグ中」タブのパラメータをチェックする必要があります。このウィンドウで、アプリケーションデバッグで適用する通貨ペア、チャート周期を指定できます。このチャートはデバッグスタート毎にテンポラリに生成され、終了後削除されます。

クライアントターミナルの \profiles\templates フォルダにある "debug.tpl" テンプレートがデバッグのために生成するチャートに適用されます。

ブレークポイント

ブレークポイントは、プログラム実行が設定された行を通過するときにそこでストップする印しとなります。ブレークポイントによって、その地点におけるプログラムの振舞い分析、すなわち変数の値、関数のスタック状況を確認できます。その後、デバッグプロセスを続けてもよいし終了しても構いません。

デバッグをスタートする前に、このブレークポイントをコードの必要なところに設定してください。そうするには、コード行の左側の境界線に近いグレー部分をマウスの左ボタンでダブルクリックしてください。マウスカーソルを必要な行に置いて、「ブレークポイントのオン/オフブレークポイントのオン/オフ」コマンド(メニュー「デバッグ」⇒、「標準」ツールバー、または「F9」ホットキー)を使用します。同様の方法で削除できます。

Breakpoint

デバッグの開始

デバッグプロセスを開始するには、「ナビゲータ」ウィンドウでプログラムファイルを選択して開きます。「Start Debugging Start Debugging」コマンド(メニュー「デバッグ」⇒、「標準」ツールバー、または「F5」ホットキー)を使用します。その後、デバッグするプログラムはトレーディングターミナルの特別なチャートに表示されます。すぐにプログラムの実行は最初のブレークポイントに到達しストップします。ストップしたポイントは、Triggered Breakpointをサポートする任意の外部クライアントからも扱えます。さらに、「ツールボックス」ウィンドウには「デバッグ」タブが表示されます。その左側の部分には、関数コールスタックが表示されます。

アプリケーションのデバッグは、サーバーから受信したプライスデータを用いた実際の条件で実行されます。デバッグ用に生成された一時的なチャートは、クライアントターミナルのいつものチャートと何ら変わりありません。

式の観察

デバッグプロセスでは、このプログラムの実行段階で得られた種々の式の値(変数)を観察することができます。その目的のために、ツールボックスウィンドウの「デバッグ」タブの右側部分が使用されます。計算式はつぎの方法で追加できます。

  • デバッグ中、必要とする計算式の上でコンテキストメニューを開き、「Add Watch ウォッチの追加」コマンドを選択するか、または「Shift+F9」ホットキーを押します。
  • 「ツールボックス」ウィンドウの「デバッグ」タブの右側の部分でコンテキストメニューを開き、「Add 追加」コマンド実行するか、または「Insert」ホットキーを押します。そうすると新しい行が作られるので、その「説明」フィールドに観察したいパラメータ名を入力します。
  • 観察式の名前を変更するには、マウスの左ボタンで名前をダブルクリックするか、またはコンテキストメニューの「編集」コマンドを使用するか、または「F2」ホットキーを押します。

Viewing stack and expressions

観察式ウィンドウでは、配列の特定要素だけではなく簡単な計算式(加算、減算、乗算、除算)も処理することができます。例えば、A[3][4] の値を観察できます。A は配列名で 3 と 4 は配列位置を示します。観察すべき対象式を追加するとき、???adding a point???かまたは「Ctrl+Space」ホットキーを押して候補一覧を表示できます。

Inserting object members

デフォルトで、int 型は10進数フォーマットで観察ウィンドウに表示されます。これを2進数または16進数で表示するには、説明フィールドにセパレータ "," と "b" または "x" をそれぞれ指定します。

Watching values in binary or hexadecimal format

コールスタックの表示

「ツールボックス」ウィンドウの「デバッグ」タブの左側にはスタックが見れます。ここではつぎの構成要素が表示されます。

  • 関数をコールしたファイル名
  • 関数名
  • 関数がコールされたファイル内の行番号

デバッグプロセスがスタートすると、ブレークポイントがトリガーとなり、コールされた関数のアドレスだけがこのウィンドウに表示されます。

ステップバイステップデバッギング

コールスタックを観察しながらステップバイステップデバッグを行うには、メニュー「デバッグ」のコマンド、または「標準」ツールバーのコマンドを使用します。

  • ステップイン ステップイン — ワンステッププログラム実行を進め、コールされた関数に入ります。同じアクションを「F11」ホットキーを押して実行できます。
  • ステップオーバー ステップオーバー — ワンステッププログラム実行を進めますが、コールされた関数には入りません。同じアクションを「F10」ホットキーを押して実行できます。
  • ステップアウト ステップアウト — プログラム実行を一つ高いレベルに移動します。同じアクションを「Shift+F11」ホットキーを押して実行できます。

上記コマンド実行のため、デバッグプロセスはストップします。これは、プログラムがブレークポイントに到達すると自動的に行われます。さらに、デバッグを任意に一時停止するには「Break Debugging ポーズ」(メニュー「デバッグ」⇒、「標準」ツールバー、または「Break」ホットキー)を使用します。

アプリケーションがブレークポイントで停止しているときも、イベントは継続して発生しています。それらはすべてはキューに保持され、カレントイベントのコードが終了次第、エキスパートアドバイザによって処理は続行されます。

ポーズ、続行、デバッグの停止

プログラムデバッグプロセスの一時停止は、処理がブレークポイント行に達すると自動的に行われます。しかし、デバッグプロセスは任意に操作することもできます。

  • ポーズ
     デバッグ処理中にプログラムの実行を任意に一時停止するには「Break Debugging ポーズ」コマンド(メニュー「デバッグ」⇒、「標準」ツールバー、または「Break」ホットキー)を使用します。その後ステップバイステップデバッグを実行できます。
  • 続行
     自動的にあるいは任意にポーズした後、デバッグモードでプログラム実行を継続するには、「Continue Debugging デバッグ続行」コマンド(メニュー「デバッグ」⇒、「標準」ツールバー、または「F5」ホットキー)を使用します。
  • 停止
     デバッグを停止するには、「デバッグを停止デバッグを停止」コマンド(メニュー「デバッグ」⇒、「標準」ツールバー、または「Shift+F5」ホットキー)を使用します。プログラムが停止すると、デバッグのためにそれがアタッチされていた特別なチャートから削除され、チャートは閉じられます。

MQ4、MQ5 および MQH ソースファイルなくしてデバッグは不可能です。デバッグの結果得られた EX4/EX5 ファイルは配布しないことを勧めます。

ヒストリーデータによるデバッグ

トレーディングロボットとテクニカルインディケータは、リアルタイムに更新されるプライスデータだけではなく、ヒストリープライスデータでもデバッグできます。プログラムは任意のヒストリー周期でテストできます。デバッグは、ストラテジーテスターのビジュアルモードでテストします。 デバッグに用いるチャートは、テスターでエミュレートしたティックシーケンスをベースとします。

ヒストリーデータでデバッグするには、MetaEditorオプションで、テストパラメータを構成します。

ヒストリーデータによるデバッグの設定

プログラムコードにブレークポイントを設定し、ヒストリーデータによるテストをスタートします。

ヒストリーデータによるデバッグのスタート

これはビジュアルモードでのテストとデバッグプロセスを開始します。

Debugging on history