Absturz wie gehabt:
Und unterbrechen lässt sich der debugger durch eine initialisierte variable vor oder zwischen den includes auch nicht mehr.
Gott sei Dank habe ich noch das letzte finale build.
Mag ja sein, daß das neue build schneller ist, aber schneller zum Absturz bringt auch nichts. hahahahahahahahahahahahahahaha (lachen der Verzweiflung)
Ja, und 4 Agents sind weiterhin verschwunden.
Otto, kannst Deine Funktion Oninit() posten? Vollständig, zumindest bis zur crash-Zeile!
Dann können die das nachbauen und den crash selber herstellen!
Das ist so leider nicht möglich, das Programm ist zu groß.
//+------------------------------------------------------------------+ //| includes and properties | //+------------------------------------------------------------------+ #include <Trade\TradeExt.mqh> // the main module #include <EasyLicense.mqh> // license module #property copyright COPY #property link LINK #property version "1.00" #property description "Testversion gültig bis " EXPIRES #include <Trade\TerminalExt.mqh> // no #define options #include <Trade\TradeControl.mqh> // no #define options #include <Trade\TradeMoney.mqh> // no #define options #include <Trade\TradeStop.mqh> // modul SL #include <Trade\TradeTake.mqh> // modul TP #include <Trade\TradeGrid.mqh> // modul grid #include <Trade\TradeTimo.mqh> // modul timeout #include <Trade\TradeSpike.mqh> // modul spike protection #include <Filter\Filter_Spread_Auto.mqh> // modul filter for spread #include <Filter\Filter_Times_Simple.mqh> // modul filter for tradingtimes #include <Filter\Filter_Breakout.mqh> // modul filter for breakout #include "Pending_Signal.mqh" #include <Tools\TesterUtils.mqh>
Ich habe einen simplen Test-EA erstellt, der das Problem zeigt. Er verursach zwar keinen Crash aber zeigt auf, daß da was im Argen ist.
Der Destructor von CTest wird sofort nach der OnInit() ausgeführt. OnTick wird niemals ausgeführt.
int x=1; // a workaround to get into @global initialization // because 'step into' is not active at start. // that's important to watch the constructors class CTest { public: bool dummy; void CTest (void) // constructor { dummy=true; } ~CTest (void) {} // destructor must be defined but is not needed bool OnTick(void) // a function, useless in this case { return(true); } }; CTest Test; int OnInit() { return(INIT_SUCCEEDED); } // after leaving OnInit() the destructor of CTest will be executed immediately void OnTick() { if(!Test.OnTick()) // program never gets here return; }
egal ob der Trick mit dem 'int x=1;' auskommentiert ist oder nicht, das Ergabnis ist das gleiche.
Wäre toll wenn du das den Russen übermitteln könntes, ich habe die Nerven nicht mehr dazu.
LG Otto
Ähmm?
Bei mir crasht da nix?
Ich hab mal Deinen Code etwas geändert und Comment("Line: ",__LINE__); hinzugefügt (wegen der Zeilennummern ein Sreenshot:
und das zeigt sich - aber erst nach gefühlten 20 (!) Sek.:
Du siehst - es läuft bis Zeile 38. Aber Du hast ja auch keine Instanz (mit New) von Test erstellt.
Bis auf die lästige Verzögerung ist alles ok und die wurde bereits als Problem erkannt:
Siehe hier und 'drum herum': https://www.mql5.com/ru/forum/324536/page12#comment_13815156
Hier ist es der Tester, aber der Debugger verwendet auch den Tester, so dass das dasselbe Problem wohl ist.
Aber warum crasht Dein EA?
Du siehst - es läuft bis Zeile 38. Aber Du hast ja auch keine Instanz (mit New) von Test erstellt.
Es ist in diesem simplen Fall nicht notwendig eine Instanz mit New zu erzeugen.
In Zeile 24 wird die instanz erzeugt. Du kanns das nachverfolgen indem du einen Breakpoint auf Zeile 6 setzt, mit Ctrl+F5(button) startest, und mit 'Step into, F11' weitermachst.
Moderne Compile/Debugger können das mit dem 'Step into' von vornherein, hier ist dieser Trick notwendig um die Initalisierung der Instanzen zu
beobachten.
Danke auf alle Fälle, daß du dir das ernsthaft angesehen hast!
Ich arbeite mit build 2190 weiter und warte auf auf ein neues Zwangsupdate, die man leider nicht abstellen kann. Hab schon genug Zeit mit dem
Sch....marrn versch.....wendet.
Also Deinen Vorschlag (Debug auf Zeile 6) kann ich gar nicht compilieren:
Gut daß du den screenshot geschickt hast.
DebugBreak() in Zeile 5 geht natürlich nicht (global space)
Ich habe einen Doppelklick auf Zeile: 'int x=1;' gemeint. Dann erscheint dort ein blaues Symbol, der Breakpoint.
Mit DebugBreak() arbeite ich sehr selten, ist mir zu unflexibel.
Ok - mein Fehler, hab schon länger nicht mehr programmiert.
Aber jetzt kann ich den Debugger gar nicht mehr aufrufen - keine Ahnung warum - und ich muss jetzt für 2h weg..
Melde mich dann wieder.
Otto , Slava bittet dich den EA zu schicken.
Sie wollen den Bug reproduzieren.
Wie Carl es auch schon sagt.
Bau ein Test Example was den Fehler zeigt.
Nur so können wir helfen.
https://www.mql5.com/ru/forum/324536/page15#comment_13824190
- 2019.11.08
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Für alle die es interessiert,
aus dem Herzen von MQ:
Durch den Übergang von Visual Studio 2019 C ++ zu LLVM 9 wurde ein neuer Build 2202 mit einer Reihe von Verbesserungen im Tester veröffentlicht und schneller (bis zu 20%).
Bitte schließen Sie sich dem Test an, indem Sie das Update über Hilfe -> Nach Updates suchen herunterladen.