Fehler, Irrtümer, Fragen - Seite 2747

 

Guten Tag, das MT5-Log zeigt folgende Meldung: 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])

Könnt ihr mir bitte sagen, was das bedeutet und was ich dagegen tun kann?

Ich danke Ihnen!

 
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:

Mein Debugger weigert sich, in einem meiner Projekte zu arbeiten. Außerdem ist sein Verhalten schwer vorhersehbar. Manchmal weigert er sich einfach, Haltepunkte einzugeben. Es weigert sich auch, einige Funktionen einzugeben. Zuerst dachte ich, der Grund dafür seien Aktualisierungen (vielleicht ging bei der Fehlersuche etwas schief). Aber bei anderen, einfacheren Programmen scheint alles zu funktionieren. Ich habe es aber nicht oft überprüft, weil ich an meinem Hauptprojekt arbeite. Es ist recht komplex und umfasst allein 15 Module meines eigenen Entwurfs (die Anzahl der Standardmodule habe ich nicht gezählt). Das Hauptmodul enthält bis zu 2000 Zeilen. Ich dachte, vielleicht liegt es an der Komplexität des Projekts... Außerdem verwende ich an einigen Stellen Makros für sich wiederholende Codeschnipsel. Außerdem verwende ich Standard-UI-Elemente, wie CAppDialog, CCheckGroup, CComboBox, CButton usw., die ich für die Funktionalität meines Programms umgeschrieben habe. Vielleicht funktioniert das Debugging wegen ihnen nicht... Die Methode CCheckGroup::itemCheckState(const string item), die ich eigens geschrieben habe, ist zum Beispiel nicht debuggingfähig. Die Methode findet das Element des Kontrollkästchens und prüft, ob es ausgewählt ist (sein Status):

Diese Art von Benutzeroberfläche habe ich am Ende erhalten:

Einige der UI-Elemente sind vorübergehend klassifiziert. Und hier ist ein Zweig, in dem ich beschrieben habe, wie ich die Show()- und Hide()-Methoden des CAppDialog-Elements überschrieben habe:https://www.mql5.com/ru/forum/338301 Der Compiler beschwerte sich in diesem Moment und ein kritischer Fehler trat auf.

Am Ende kompiliert das Projekt normal, der Compiler erzeugt keine Fehler. Aber das Debugging schlägt fehl und zeigt die Ausführung einiger Codefragmente, Funktionen, Methoden usw. einfach nicht an.

Soweit ich weiß, kann es dafür mehrere Gründe geben.

  1. Komplizierter Code des Projekts, Verwendung von Makros
  2. Komplizierter Code unter Verwendung von Standard-Benutzeroberflächenelementen wie CAppDialog, CCheckGroup, CComboBox, CButton (für die ich auch neue Methoden geschrieben und einige der bestehenden neu definiert habe)
  3. Debugger-Fehler im Zusammenhang mit dem neuen Build (möglich, unwahrscheinlich).

Build- und Systeminformationen:

Wer hat ähnliche Probleme mit dem Debugger gehabt und was könnte die Ursache sein?

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

In der CCheckGroup::itemCheckState-Methode (in die der Debugger nicht hineingelangen kann) habe ich etwas wie das Folgende eingegeben:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
}

Und erhielt die folgende Meldung:

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

Es stellt sich heraus, dass die Methode gut funktioniert, aber der Debugger sieht sie aus irgendeinem Grund nicht mehr. Ohne die ordnungsgemäße Arbeit des Debuggers kann sich die Arbeit am Projekt lange Zeit verzögern. Ich möchte, dass die Entwickler diesem Fehler, der wahrscheinlich mit dem Debugger zusammenhängt, Aufmerksamkeit schenken.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Mihail Matkovskij:

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

Es stellt sich heraus, dass die Methode richtig funktioniert, aber der Debugger sieht sie aus irgendeinem Grund nicht mehr.
Wenn der Debugger nicht richtig funktioniert, kann sich das Projekt lange Zeit verzögern. Ich möchte, dass die Entwickler diesem Fehler, der wahrscheinlich mit dem Debugger zusammenhängt, Aufmerksamkeit schenken.

Es ist eine Menge Text, ich habe ihn nicht ganz gelesen.
Aber wenn etwas in der Debug-Version funktioniert und in der Release-Version nicht, oder umgekehrt, überprüfen Sie, ob alle Variablen und Felder, insbesondere in der Klasse/Struktur, initialisiert wurden.

 
Mihail Matkovskij:
vielleicht ist die Methode inline, dann ist es nicht das Problem des Debuggers, sondern das des Debug-Mode-Compilers
 
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%)

Zum Thema, dass die SymbolInfo-Funktionen kostenlos sind.

 
TheXpert:
vielleicht ist die Methode inline, dann ist es nicht das Problem des Debuggers, sondern das des Compilers für den Debug-Modus

Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...

 
fxsaber:
Die SymbolInfo-Funktionen sind kostenlos.

Es handelt sich also um die Kosten der Funktion selbst, nicht um die Kosten der Übergabe der Zeichenkette als Wert und nicht als Referenz!

Ihre Version mit dem Cache ist eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Ausführungszeit des EAs in Anspruch nimmt (was ich nicht wirklich glaube)

 
Mihail Matkovskij:

Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...

vielleicht ist Ihre Dateistruktur so komplex, dass der Debugger keinen Haltepunkt zuordnen kann, dann ist das das Problem des Debuggers.
 
TheXpert:

sind die Kosten für die Funktion selbst, nicht die Kosten für die Übergabe der Zeichenkette als Wert und nicht als Referenz!

Das ist der Punkt, auf den ich ursprünglich hinauswollte.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Fehler, Irrtümer, Fragen

fxsaber, 2020.05.20 13:24

Es ist besser, eine

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

Im Optimierer werden diese Funktionen zig-Milliarden Mal aufgerufen.


Außerdem ist Ihre Variante mit dem Cache eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Laufzeit eines EA einnimmt (was ich nicht wirklich glaube)

In einem bestimmten Stadium wird nicht nur der relative Teil der benötigten Zeit wichtig, sondern auch der absolute Teil.