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

 

こんにちは、MT5のログにはこのようなメッセージが表示されています。 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])です。

皆さん、その意味と対処法を教えてください。

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

 
fxsaber:
time of [Bench1()] = 1483377
100000000
time of [Bench2()] = 1725035
100000000
time of [Bench1()] = 1523441
100000000
time of [Bench2()] = 1712777
100000000
time of [Bench1()] = 1416779
100000000
time of [Bench2()] = 1452093
100000000
time of [Bench1()] = 1399366
100000000
time of [Bench2()] = 1449939
 
Mihail Matkovskij:

私のプロジェクトの1つでデバッガが動作しない。しかも、その挙動を予測することは困難です。時々、ブレークポイントに入るのを拒否する。また、一部の機能の入力も拒否されます。最初はアップデートが原因かと思ったのですが(デバッグで何か問題があったのかもしれません)。しかし、他のもっとシンプルなプログラムでは、すべてがうまくいくようです。メインプロジェクトに取り組んでいるので、あまりチェックしていませんが。かなり複雑で、私が設計したモジュールだけで15個あります(標準モジュールの数は数えていません)。メインモジュールには最大で2000行が含まれます。もしかしたら、プロジェクトの複雑さのせいかもしれないと思いましたが......。また、繰り返し使うコードスニペットには、マクロを使うところもあります。また、CAppDialog, CCheckGroup, CComboBox, CButtonなどの標準的なUI要素も、私のプログラムの機能に合わせて書き直したものを使っています。もしかしたら、それらのせいでデバッグがうまくいかないかもしれない...。例えば、私が特別に書いたCCheckGroup::itemCheckState(const string item)メソッドはデバッグされないんだ。このメソッドは、チェックボックスの項目を見つけ、それが選択されているかどうか(その状態)をチェックします。

結局、こういうUIになりました。

UI要素の一部を仮区分しています。そして、CAppDialog要素のShow()とHide()メソッドをオーバーロードした方法を説明したブランチはこちらです。https://www.mql5.com/ru/forum/338301。その瞬間、コンパイラが文句を言い、クリティカルエラーが発生した。

最終的にプロジェクトは正常にコンパイルされ、コンパイラは何のエラーも発生させません。しかし、デバッグは失敗し、いくつかのコードフラグメント、関数、メソッドなどの実行を表示しないだけです。

私が理解する限り、その理由はいくつかありそうです。

  1. プロジェクトの複雑なコード、マクロの使用
  2. CAppDialog, CCheckGroup, CComboBox, CButtonなどの標準的なUI要素を使った複雑なコード(これらのために新しいメソッドを書き、既存のメソッドのいくつかを再定義しました。)
  3. 新しいビルドに関連したデバッガーのバグ(可能性あり、可能性なし)。

ビルドとシステム情報。

デバッガーで同様の問題が発生した方、またその原因は何でしょうか?

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

CCheckGroup::itemCheckStateメソッド(デバッガが入れない)に、以下のようなものを入れています。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CCheckGroup::itemCheckState(const string item) {
  int total = m_strings.Total();
  
  if(total != m_states.Total())
    return -1;
    
  int i = 0;
  for(; i < total; i++) {
    if(m_strings.At(i) == item) {
      Alert(__FUNCTION__ + " item: " + item  + " state: " + (string)m_states.At(i));
      return m_states.At(i);
    }
  }
  
  return -1;
}

そして、次のようなメッセージが表示されました。

2020.05.21 13:20:44.229 CCheckGroup::itemCheckState item: 39 state: 32

このメソッドは正常に動作しますが、デバッガが何らかの理由でそれを見なくなることが判明しました。デバッガーが適切に働かないと、プロジェクトの作業が長期に渡って滞る可能性がある。デバッガに関連すると思われるこのバグに、開発者は注意を払うようお願いしたい。
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Mihail Matkovskij:

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

このメソッドは正常に動作しますが、デバッガが何らかの理由でそれを見なくなることが判明しました。
デバッガが正常に動作しないと、プロジェクトが長期に渡って遅延する可能性があります。デバッガに関連すると思われるこのバグに、開発者の方々に注目していただきたいです。

文字数が多いので、全部は読んでいない。
しかし、デバッグ版で動作したものがリリース版で動作しない場合、またはその逆の場合は、特にクラス/構造体のすべての変数とフィールドが初期化されているかどうか確認してください。

 
Mihail Matkovskij:
そのメソッドがインラインである場合、デバッガの問題ではなく、デバッグモードコンパイラの問題です。
 
TheXpert:
input int Range = 0;

double Res = 0;

#define  GETCURRENTTICK GetCurrentTick1(Tick)
//#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
//#define GETCURRENTTICK GetCurrentTick3(Tick)

void OnTick()
{
  MqlTick Tick;
    
  for (int i = 0; i < 100; i++)
    if (GETCURRENTTICK)
      Res += Tick.bid;
}

double OnTester()
{
  return(Res);
}

bool GetCurrentTick1( MqlTick &Tick )
{
  return(SymbolInfoTick(_Symbol, Tick));
}

bool GetCurrentTick2( MqlTick &Tick, const bool NewTick = false )
{
  static MqlTick CurrentTick;
  
  if (NewTick)
    SymbolInfoTick(_Symbol, CurrentTick);
  
  Tick = CurrentTick;
  
  return(true);
}

bool GetCurrentTick3( MqlTick &Tick )
{
  static MqlTick _Tick; // Аналог Bid в MT4
  
  _Tick.bid += _Point;  // Хоть какой-то расход вычислительный ресурсов.
  
  Tick = _Tick;
  
  return(true);
}
#define  GETCURRENTTICK GetCurrentTick1(Tick)
#define  GETCURRENTTICK GetCurrentTick2(Tick, !i)
#define  GETCURRENTTICK GetCurrentTick3(Tick)
2020.05.21 14:19:52.450 Core 1  pass 0 returned result 693275970.165784 in 0:00:08.925
2020.05.21 14:19:59.980 Core 1  pass 1 returned result 693275970.165784 in 0:00:07.529
2020.05.21 14:20:07.370 Core 1  pass 2 returned result 693275970.165784 in 0:00:07.390
2020.05.21 14:20:14.694 Core 1  pass 3 returned result 693275970.165784 in 0:00:07.323
2020.05.21 14:20:21.688 Core 1  pass 4 returned result 693275970.165784 in 0:00:06.994
2020.05.21 14:20:29.114 Core 1  pass 5 returned result 693275970.165784 in 0:00:07.425
2020.05.21 14:20:36.133 Core 1  pass 6 returned result 693275970.165784 in 0:00:07.019
2020.05.21 14:20:43.557 Core 1  pass 7 returned result 693275970.165784 in 0:00:07.424
2020.05.21 14:20:49.580 Core 1  pass 8 returned result 693275970.165784 in 0:00:06.022
2020.05.21 14:20:57.273 Core 1  pass 9 returned result 693275970.165784 in 0:00:07.693
2020.05.21 14:21:03.993 Core 1  pass 10 returned result 693275970.165784 in 0:00:06.719
2020.05.21 14:21:03.993 Tester  optimization finished, total passes 11
2020.05.21 14:21:04.003 Statistics      optimization done in 1 minutes 22 seconds
2020.05.21 14:21:04.003 Statistics      shortest pass 0:00:06.022, longest pass 0:00:08.925, average pass 0:00:07.314
2020.05.21 14:21:04.003 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:21:49.346 Core 1  pass 0 returned result 693275970.165784 in 0:00:03.050
2020.05.21 14:21:51.108 Core 1  pass 1 returned result 693275970.165784 in 0:00:01.761
2020.05.21 14:21:52.903 Core 1  pass 2 returned result 693275970.165784 in 0:00:01.795
2020.05.21 14:21:54.731 Core 1  pass 3 returned result 693275970.165784 in 0:00:01.827
2020.05.21 14:21:56.536 Core 1  pass 4 returned result 693275970.165784 in 0:00:01.803
2020.05.21 14:21:58.341 Core 1  pass 5 returned result 693275970.165784 in 0:00:01.805
2020.05.21 14:22:00.135 Core 1  pass 6 returned result 693275970.165784 in 0:00:01.793
2020.05.21 14:22:01.912 Core 1  pass 7 returned result 693275970.165784 in 0:00:01.777
2020.05.21 14:22:03.663 Core 1  pass 8 returned result 693275970.165784 in 0:00:01.750
2020.05.21 14:22:05.458 Core 1  pass 9 returned result 693275970.165784 in 0:00:01.794
2020.05.21 14:22:07.274 Core 1  pass 10 returned result 693275970.165784 in 0:00:01.815
2020.05.21 14:22:07.274 Tester  optimization finished, total passes 11
2020.05.21 14:22:07.284 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:22:07.284 Statistics      shortest pass 0:00:01.750, longest pass 0:00:03.050, average pass 0:00:01.906
2020.05.21 14:22:07.284 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:23:00.873 Core 1  pass 0 returned result 661757660284.981689 in 0:00:02.859
2020.05.21 14:23:02.704 Core 1  pass 1 returned result 661757660284.981689 in 0:00:01.830
2020.05.21 14:23:04.488 Core 1  pass 2 returned result 661757660284.981689 in 0:00:01.783
2020.05.21 14:23:06.227 Core 1  pass 3 returned result 661757660284.981689 in 0:00:01.737
2020.05.21 14:23:07.778 Core 1  pass 4 returned result 661757660284.981689 in 0:00:01.550
2020.05.21 14:23:09.517 Core 1  pass 5 returned result 661757660284.981689 in 0:00:01.738
2020.05.21 14:23:11.288 Core 1  pass 6 returned result 661757660284.981689 in 0:00:01.771
2020.05.21 14:23:12.997 Core 1  pass 7 returned result 661757660284.981689 in 0:00:01.708
2020.05.21 14:23:14.815 Core 1  pass 8 returned result 661757660284.981689 in 0:00:01.817
2020.05.21 14:23:16.621 Core 1  pass 9 returned result 661757660284.981689 in 0:00:01.805
2020.05.21 14:23:18.313 Core 1  pass 10 returned result 661757660284.981689 in 0:00:01.691
2020.05.21 14:23:18.313 Tester  optimization finished, total passes 11
2020.05.21 14:23:18.323 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:23:18.323 Statistics      shortest pass 0:00:01.550, longest pass 0:00:02.859, average pass 0:00:01.844
2020.05.21 14:23:18.323 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

SymbolInfoの関数が 無料であることについて。

 
TheXpert:
メソッドがインラインである場合、デバッガの問題ではなく、デバッグモード用のコンパイラの問題です。

その通り、プロジェクトは、私や標準モジュールのマクロで溢れかえっていることがわかりました。そのためか、デバッガーは *.ex5 デバッグファイル内のコマンドと *.mq5 ソースファイルや他のモジュール内の行を一致させることができないことがあります...。

 
fxsaber:
SymbolInfo関数は無償です。

ということは、関数自体のコストであって、文字列を参照ではなく値で渡すことのコストではないのです!

この関数の実行がEAの実行時間のかなりの割合を占めるのであれば(私はそうは思っていませんが)、キャッシュを使ったバージョンはかなりの解決策になります。

 
Mihail Matkovskij:

その通り、プロジェクトは、私や標準モジュールのマクロで溢れかえっていることがわかりました。そのためか、デバッガーは *.ex5 デバッグファイル内のコマンドと *.mq5 ソースファイルや他のモジュール内の行を一致させることができないことがあります...。

ファイル構造が複雑で、デバッガがブレークポイントを 設定できない場合は、デバッガ側の問題です。
 
TheXpert:

は関数自体のコストであり、文字列を参照ではなく値で渡す場合のコストではありません!

最初はそう思っていたんです。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

エラー、バグ、質問

fxsaber, 2020.05.20 13:24

があったほうがいい。

const MqlTick _Tick; // Текущий _Symbol-тик.

オプティマイザでは、これらの関数が何百億回と呼び出される。


さらに、この関数の実行がEAの実行時間のかなりの割合を占めるのであれば、キャッシュを使ったあなたの変形はかなりの解決策になります(私はそうは思っていませんが)。

ある段階になると、かかった時間の相対的な部分だけでなく、絶対的な部分も重要になってきます。