トレースタスク(関数グラフの作成) - ページ 4 123456789 新しいコメント Алексей Тарабанов 2011.01.22 23:26 #31 こんなテンプレートを使ってみました。 /* extern bool TraceIsAllowed; // Показывать трассировку? //+------------------------------------------------------------------+ //| XXX //+------------------------------------------------------------------+ void XXX(string MasterName, string ProgramTrace, string Parameter) { string SlaveName="XXX"; // Имя функции. ProgramTrace=ProgramTrace+"=>"+SlaveName; // Путь обращения к функции. if( Parameter!="" ) ProgramTrace=ProgramTrace+"("+Parameter+")"; string Message=ProgramTrace; // Функциональные сообщения. LastErrorCode=GetLastError(); if( LastErrorCode>0 ) { // Ошибка или некорректные параметры. Message=Message+" ERROR "+LastErrorCode+" at Start"; Message=Message+""; // Значения параметров. Print(Message); return; // Функцию не выполнять. } if( TraceIsAllowed ) Print(Message); // Задана трассировка программы . //---- //---- LastErrorCode=GetLastError(); if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode; if( Message!=ProgramTrace ) { // Были функциональные сообщения. Message=Message+" "; // Функция выполнена. Print(Message); // Печать функциональных сообщений. } return; } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { string SlaveName="Init"; // Имя функции. string ProgramTrace=SlaveName; // Путь обращения к функции. string Message=ProgramTrace; // Функциональные сообщения. LastErrorCode=GetLastError(); if( LastErrorCode>0 ) { // Ошибка или некорректные параметры. Message=Message+" ERROR "+LastErrorCode+" at Start"; Print(Message); return(0); // Функцию не выполнять. } if( TraceIsAllowed ) Print(Message); // Задана трассировка программы . //---- //---- LastErrorCode=GetLastError(); if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode; if( Message!=ProgramTrace ) { // Были функциональные сообщения. Message=Message+" "; // Функция выполнена. Print(Message); // Печать функциональных сообщений. } return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { string SlaveName="Start"; // Имя функции. string ProgramTrace=SlaveName; // Путь обращения к функции. string Message=ProgramTrace; // Функциональные сообщения. LastErrorCode=GetLastError(); if( LastErrorCode>0 ) { // Ошибка или некорректные параметры. Message=Message+" ERROR "+LastErrorCode+" at Start"; Print(Message); return(0); // Функцию не выполнять. } if( TraceIsAllowed ) Print(Message); // Задана трассировка программы . //---- //---- LastErrorCode=GetLastError(); if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode; if( Message!=ProgramTrace ) { // Были функциональные сообщения. Message=Message+" "; // Функция выполнена. Print(Message); // Печать функциональных сообщений. } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { string SlaveName="DeInit"; // Имя функции. string ProgramTrace=SlaveName; // Путь обращения к функции. string Message=ProgramTrace; // Функциональные сообщения. LastErrorCode=GetLastError(); if( LastErrorCode>0 ) { // Ошибка или некорректные параметры. Message=Message+" ERROR "+LastErrorCode+" at Start"; Print(Message); return(0); // Функцию не выполнять. } if( TraceIsAllowed ) Print(Message); // Задана трассировка программы . //---- //---- LastErrorCode=GetLastError(); if( LastErrorCode>0 ) Message=Message+" ERROR "+LastErrorCode; if( Message!=ProgramTrace ) { // Были функциональные сообщения. Message=Message+" "; // Функция выполнена. Print(Message); // Печать функциональных сообщений. } return(0); } */ //+------------------------------------------------------------------+ --- 2011.01.22 23:34 #32 tara: こんな感じのテンプレートを使いました。 というのは、ちょっと違う。 Алексей Тарабанов 2011.01.22 23:35 #33 sergeev: コードにも、最初と最後に2つのブロックが見えますが...1つでいいんですよね? 最後の方は、トレースとは関係ないですね。削除することができます。 --- 2011.01.22 23:36 #34 tara: 末尾のものはトレースには関係ありません。削除することができます。 そうなんだ、でもやっぱり...エラーを見るのではなく、関数への各入力を見るのです。 Алексей Тарабанов 2011.01.22 23:38 #35 sergeev: ええ、それはわかりますが、それでも...エラーを見るのではなく、関数への各入力を見るのです。 エラーも捨てられる。 extern bool TraceIsAllowed; // Показывать трассировку? //+------------------------------------------------------------------+ //| XXX //+------------------------------------------------------------------+ void XXX(string MasterName, string ProgramTrace, string Parameter) { string SlaveName="XXX"; // Имя функции. ProgramTrace=ProgramTrace+"=>"+SlaveName; // Путь обращения к функции. if( Parameter!="" ) ProgramTrace=ProgramTrace+"("+Parameter+")"; string Message=ProgramTrace; // Функциональные сообщения. if( TraceIsAllowed ) Print(Message); // Задана трассировка программы . //---- //---- return; } Андрей 2011.01.22 23:40 #36 ...Mqlはトレースを行うのに適した言語なのか!!!! --- 2011.01.22 23:40 #37 tara: 間違いも捨てることができる。 :)) 最初の投稿を読むと、問題は、ソースコードの各関数に、"{" の直後に、サービス関数を1つだけ追加することにあります。 しかし、そのような方法で、ソースコードのすべての通路を取得し、コールツリーを構築することができます。 ソース関数の入力パラメータは一切変更せず、内部の結果やコードも変更しません。 jartmailru。 ...Mqlはトレースを行うのに適した言語なのか!!!! 純粋なトレースのことではありません。関数のグラフを構成することだけです。 Андрей 2011.01.22 23:48 #38 sergeev: 純粋なトレースのことではありません。関数グラフの構築についてだけ。 静的コード解析...実行は必須ではありません。 コードを関数(ブロック)に分割し、誰が誰を呼んでいるのかを分析するのです。 Алексей Тарабанов 2011.01.22 23:50 #39 jartmailru: ...Mqlはトレースを行うのに適した言語なのか!!!! いいじゃないですか、やりたいなら。 Vladimir Gomonov 2011.01.22 23:51 #40 sergeev: :)) 最初の投稿を読むと、問題は、ソースコードの各関数に、"{" の直後に、サービス関数を1つだけ 追加することにあります。 しかし、すべてのソースコードのパスを取得し、コールツリーを構築するような方法で。 この 課題が解決不可能であることは明らかではないでしょうか。そうすれば、算術()[] と演算子{}の 括弧のペアをなくして、1つの開き括弧に置き換えることができるのです。それはあまり良くないことでしょうか? ;) 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんな感じのテンプレートを使いました。
というのは、ちょっと違う。
コードにも、最初と最後に2つのブロックが見えますが...1つでいいんですよね?
末尾のものはトレースには関係ありません。削除することができます。
そうなんだ、でもやっぱり...エラーを見るのではなく、関数への各入力を見るのです。
ええ、それはわかりますが、それでも...エラーを見るのではなく、関数への各入力を見るのです。
エラーも捨てられる。
間違いも捨てることができる。
:))
最初の投稿を読むと、問題は、ソースコードの各関数に、"{" の直後に、サービス関数を1つだけ追加することにあります。
しかし、そのような方法で、ソースコードのすべての通路を取得し、コールツリーを構築することができます。
ソース関数の入力パラメータは一切変更せず、内部の結果やコードも変更しません。
...Mqlはトレースを行うのに適した言語なのか!!!!
純粋なトレースのことではありません。関数のグラフを構成することだけです。
純粋なトレースのことではありません。関数グラフの構築についてだけ。
コードを関数(ブロック)に分割し、誰が誰を呼んでいるのかを分析するのです。
...Mqlはトレースを行うのに適した言語なのか!!!!
いいじゃないですか、やりたいなら。
:))
最初の投稿を読むと、問題は、ソースコードの各関数に、"{" の直後に、サービス関数を1つだけ 追加することにあります。
しかし、すべてのソースコードのパスを取得し、コールツリーを構築するような方法で。
この 課題が解決不可能であることは明らかではないでしょうか。そうすれば、算術()[] と演算子{}の 括弧のペアをなくして、1つの開き括弧に置き換えることができるのです。それはあまり良くないことでしょうか?
;)