ああ、そうだ、プーシキン、そうだ、この野郎。
素晴らしい記事だ。本物の内視鏡だ。
大きなプロジェクトでは必ず使うよ。エラーの場所を特定するのに24時間かかるんだ。
デバッガーもいいけど、トレースは信号通過の全体像を教えてくれる。
どういたしまして、あなたのためにベストを尽くしました。:)
もし何か必要なものがあれば、書いてください。
-----
完全に明確にするために、さらに2つの純粋に技術的な点について言う必要があると思います。
1. 1.Trace.mqhファイルでは、トレーサーのインスタンスが1つ作成されます(ファイルの一番下にあります)。
extern CTraceCtrl* m_trace; // トレーサーの単一のインスタンス
extern ディレクティブのおかげで、インスタンスは1つだけになります。つまり、#include "Trace.mqh " ファイルにいくつ#include "Trace.mqh " が含まれているかには依存しません。
2. CTraceView クラスがCTraceCtrlで 使用される理由はただ一つ、CTraceCtrl::Break 関数を実行するためである。
すなわち、ループされたwhile (true)の 中で、ユーザがクリックしたときのリアクションを持つためである。
PATH__ マクロ処理を追加した(ビルド420)。
INFOウィンドウにノードファイルを開くボタンを追加しました。
オープンはShellExecute コマンドで行うため、DLLのインポート許可が 必要。
ノードの説明を追加する機能を追加しました。
例えば、ノードに入るための条件や関連情報を表示することができます。
この説明はツリー表示で動的に更新されます。
コード例
void OnTick() { _IN(""); static datetime limit_time=0; // 最後の取引処理時間 + タイムアウト //--- タイムアウトの場合は処理しない if(TimeCurrent()>=limit_time) { _IN2(TimeCurrent()+">="+limit_time); //--- データをチェックする if(Bars(Symbol(),Period())>2*InpMATrendPeriod) { _IN3(Bars(Symbol(),Period())>2*InpMATrendPeriod); //--- 処理された場合、タイムアウト(秒)で制限時間を変更する if(ExtExpert.Processing()) limit_time=TimeCurrent()+ExtTimeOut; } } //--- }
情報の表示例
説明表示を有効にするボタン - 右上"i"
1.ノードのプロパティを表示するための独立したCPropertyView クラスを追加。
2.クラスのオーバーライド関数をすべて仮想 関数にし、すべてのクラスが更新されるようにした。
3.
m_edit -CPropertyViewの 編集可能フィールドの符号
m_brkuse -CTraceCtrl::Break 関数が停止して呼び出されるノードへの呼び出し回数 3.
3. フォーラム 上のUrainの メモによると、コードストップの使用方法として2つの可能性が追加された。
- ストップの有効/無効(赤いボタンD)
- 指定したノード呼び出し回数で停止する。
а.ノードの初期番号m_brkuseを 設定するには、マクロを使用します(トレースファイル内)。
#define _BRKUSES(u) if (!NIL(m_trace)) if (!NIL(m_trace.m_cur)) ........
b.または、ノードのプロパティ・ウィンドウの"DebugBreak after"フィールドで直接 、停止する前に必要な呼び出し回数を指定します。
chartevent_click
chartevent_keydown
chartevent_object_delete
chartevent_object_change
chartevent_object_create
5.ツリーマッピングのマイナーな外観上の変更
このメカニズムをスクリプトで使う方法はあるのだろうか?
あると思う。しかし、通常スクリプトではコードはあまり分岐されません(もちろんスクリプトがループしている場合は別ですが)。
それに、スクリプトではOnChartEvent イベントが処理されないという不都合もある。
そうだと思う。しかし、通常スクリプトではコードはあまり分岐しません(もちろんスクリプトがループしている場合は別ですが)。
それに、スクリプトはOnChartEventイベントを扱わないという不都合もある。
そして、もし私のスクリプトが多くの異なるクラス、クラス階層を使用するのであれば?
スクリプトのためのツールも磨く必要があると思うのだが...。
CTraceViewクラスは誰が呼ぼうと気にせず、ツリーを作って表示する。
しかし、スクリプトには解決不可能なフィードバックの問題がある。積極的にツリーを操作することはできない。

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 ソースコードのトレーシング デバッギング 構造分析 はパブリッシュされました:
作者: o_O