エラー、バグ、質問 - ページ 822

 
falkov:

ええ、もちろん、それがどうした。いろいろなチェックをしてきました。

場所を知っている、なぜそうなるのか理解できない!

この行の前の配列サイズや他の変数に異常がないかをチェックしています。

しかし、それでも週に2、3回はExpert Advisorがクラッシュしてしまいます。

これは私の勘違いである可能性が高いので、反対はしません。犬の埋葬場所を調べる仕組みがないことに反対しているのです。

同時に、簡単で便利な除外メカニズムもあります。そんな時のために導入されたのです。

レナートは、「この仕組みを導入すると、賢明でないプログラマーがすぐに間違いを犯すようになり、その尻拭いをしなければならなくなる」と答えてくれた。

それはおかしな議論だと、私は思います。

まあ、MetaQuotesの例外規定についての見解はよく知られていて、取り消すことはできないので(2年前に私自身が彼らと話し合いました)、私たちは今あるものでやっていくしかないのです。ソースの一部が表示されていれば、より有用でした。
 

ところで、例外処理に代わるものとして、次のような単純なOnErrorイベントハンドラを実装することができます。

bool OnError(uint errorcode, string filename, uint lineno, uint colno, string context)
{
  ...
  if(critical)
  {
    return(true); // для подтверждения остановки выполнения скрипта
  }
  else
  {
    return(false); // для продолжения выполнения на чарте (текущий вызов прерывается, но следующие тики/таймеры и пр. работают)
  }
}
 
内蔵のコードチェッカー、同じアサーションを使用します。
 
marketeer:

ところで、例外処理に代わるものとして、次のような単純なOnErrorイベントハンドラを実装することができます。


OnErrorで見えるようにするために、必要な変数をグローバルに宣言する必要があったので、完全ではありませんが、それで満足できたと思います。

でも、どうせなら満足したい。時には、エラーをキャッチするだけで、問題を発見し修正した後、再びローカルに隠すことができます。

このOnErrorに関する考えをRenatにどう伝えるか?

 
falkov:

OnErrorで見えるようにするには、必要な変数をグローバルに宣言する必要があったので、完全ではありませんが、これで満足できたと思います。

でも、どうせなら満足のいくものを。時々エラーをキャッチすればいいのです。問題を発見して修正した後、再びローカルに隠せばいいのです。

このOnErrorに関するアイデアをRenatに伝えるにはどうしたらいいでしょうか?

主義主張としてではなくプログラムがクリティカル エラーに陥った場合、その運命はアンロードされるだけである。

重要な機能にはリターンコードがあり、すべてが詳細に説明されています。そのため、開発者は自分のプログラムに対するコントロールを失うことはありません。

ps: インデックス付けのミス箇所を明確に示した後でも、「足りない!」と言われるのはもちろんすごいことです。

 
TheXpert:
組み込みのコードチェック、同じアサーションを使用します。

まあ、ここは状況が違うんですけどね。散発的なエラー(不明確な条件下でまれに再現される)を持つ人がいる。Expert Advisorがとにかくクラッシュする。Assertを設定すると、同じエラーが出ますが、すぐには出ませんし、その理由もはっきりしません。だから、コードを見せろと言ってるんです。

最後に、スクリプトを停止させるようなエラーは、場所だけでなく、コールスタック、変数の内容など、完全なコンテキストを伴うと便利かもしれません。このような出力は、プリプロセッサーディレクティブを使って オプションにすることができます。つまり、エラー診断レベルを指定します。

Документация по MQL5: Основы языка / Препроцессор
Документация по MQL5: Основы языка / Препроцессор
  • www.mql5.com
Основы языка / Препроцессор - Документация по MQL5
 
marketeer:

まあ、ここは状況が違うんですけどね。散発的なエラー(不明確な条件下でまれに再現される)を持つ人がいる。Expert Advisorがとにかくクラッシュする。Assertを設定すると、同じエラーが出ますが、すぐには出ませんし、その理由もはっきりしません。だから、コードを見せろと言ってるんです。

最後に、スクリプトを停止させるようなエラーは、場所だけでなく、コールスタック、変数の内容など、完全なコンテキストを伴うと便利かもしれません。このような出力は、プリプロセッサーディレクティブを使って オプションにすることができます。

デバッグ時にコンテキストを完全にトレースすることができます。

もうひとつは、散発的なエラーはある断片でキャッチする必要があることです。

そして、そこにニーズがあるのです。 ヒストリーにデバッガを実行.

この問題は古くからあり、何度も提起されていますが、まだ残っています。

 
marketeer:

まあ、ここは状況が違うんですけどね。散発的なエラー(不明確な条件下でまれに再現される)を持つ人がいる。Expert Advisorがとにかくクラッシュする。Assertを設定すると、同じエラーが出ますが、すぐには出ませんし、その理由もはっきりしません。だから、コードを見せろと言ってるんです。

散発的なエラーの95%は、初期化エラーやその不足に関連しています。 そのため、コードの断片は 役に立たず、コード全体はパラノイアのため役に立ちません ;-)

その理由は、顕在化した場所からかなり離れたところに求めるべきであり、開発者の射殺を要求するだけのアフタではつまらない。必ず役に立ちます。

// 本当に助かります、ファルコフさん。)

 
Urain:

デバッグで全コンテキストをトレースすることができる。

もうひとつは、散発的なエラーはあるフラグメントでキャッチすることです。

そして、そこにニーズが生まれるのです。 ヒストリーにデバッガを実行.

この問題は古くからあり、何度も提起されていますが、未だに残っています。

また、エラーの内容に関係なく、大いに役立つと思います。
 
marketeer:

まあ、ここは状況が違うんですけどね。散発的なエラー(不明確な条件下でまれに再現される)を持つ人がいる。Expert Advisorがとにかくクラッシュする。Assertを設定すると、同じエラーが出ますが、すぐには出ませんし、その理由もはっきりしません。だから、「コードを見せてください」とお願いしたのです。

コードを表示する意味がありません。なぜなら、かなり複雑なロジックがあり、誰がそれを理解する必要があるのか、また、エラーセクション自体は単純ですが、エラーを見つけるための何も与えず、純粋なコードの画面が半分あるだけです。各変数は、下部と上部の境界がチェックされる。変数がこれらの制限を超えた場合、すべての変数とその値の一覧を表示するメッセージが表示されます。もちろんどこかにエラーはあるのですが、そこが!!!。週に1、2回の頻度で起こることを忘れないようにしましょう。Expert Advisorは、24時間体制で稼働しています。

それから、今回初めてですが、この件に限らず興味があります。

最後に、スクリプトを停止させるようなエラーは、場所だけでなく、コールスタックや変数の内容など、完全なコンテキストを伴うと便利かもしれませんね。このような出力は、プリプロセッサーディレクティブを使って オプションにすることができます。つまり、エラー診断のレベルを指定します。

それは素晴らしいことです。完全なコンテキストがあれば、間違いなくエラーを見つけることができるのです必要なのは、Expert Advisorが終了する前の、エラー発生時の変数を見ることです。

レナートへもしかしたら、こんなことができるかも?