Errori, bug, domande - pagina 2747

 

Buon pomeriggio, il log di MT5 mostra questo messaggio: 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])

Potete dirmi per favore cosa significa e cosa devo fare?

Grazie!

 
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:

Il mio debugger si rifiuta di funzionare in uno dei miei progetti. Inoltre, il suo comportamento è difficile da prevedere. A volte si rifiuta semplicemente di inserire i breakpoint. Si rifiuta anche di inserire alcune funzioni. All'inizio ho pensato che la ragione fossero gli aggiornamenti (forse qualcosa è andato storto con il debug). Ma in altri programmi più semplici tutto sembra funzionare. Non l'ho controllato molto, però, perché sto lavorando al mio progetto principale. È abbastanza complesso e comprende 15 moduli solo di mia progettazione (non ho contato il numero di moduli standard). Il modulo principale contiene fino a 2000 linee. Ho pensato che forse è tutta una questione di complessità del progetto... Inoltre, in alcuni posti uso macro per frammenti di codice ripetitivi. Inoltre uso elementi standard di UI, come CAppDialog, CCheckGroup, CComboBox, CButton ecc. che ho riscritto per la funzionalità del mio programma. Forse il debug non funziona a causa loro... Per esempio, il metodo CCheckGroup::itemCheckState(const string item) che ho scritto appositamente non fa debug. Il metodo trova l'elemento della casella di controllo e controlla se è selezionato (il suo stato):

Questo è il tipo di UI che ho finito per ottenere:

Alcuni elementi dell'UI sono temporaneamente classificati. Ed ecco un ramo dove ho descritto come ho scavalcato i metodi Show() e Hide() dell'elemento CAppDialog:https://www.mql5.com/ru/forum/338301 Il compilatore si è lamentato in quel momento e si è verificato un errore critico.

Alla fine il progetto si compila normalmente, il compilatore non genera alcun errore. Ma il debug fallisce e non mostra l'esecuzione di alcuni frammenti di codice, funzioni, metodi e così via.

Per quanto ho capito, ci possono essere diverse ragioni per questo.

  1. Codice complicato del progetto, uso di macro
  2. Complicazione del codice utilizzando elementi standard dell'interfaccia utente, come CAppDialog, CCheckGroup, CComboBox, CButton (per i quali ho anche scritto nuovi metodi e sovrascritto alcuni di quelli esistenti)
  3. Bug del debugger legato alla nuova build (possibile, improbabile).

Informazioni sulla costruzione e sul sistema:

Chi ha avuto problemi simili con il debugger e quale potrebbe essere la causa?

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

Nel metodo CCheckGroup::itemCheckState (in cui il debugger non può entrare) ho messo qualcosa come questo:

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

E ho ricevuto il seguente messaggio:

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

Si scopre che il metodo funziona bene, ma il debugger smette di vederlo per qualche motivo. Senza un lavoro adeguato del debugger, il lavoro sul progetto può essere ritardato per molto tempo. Vorrei che gli sviluppatori prestassero attenzione a questo bug, molto probabilmente legato al debugger.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Mihail Matkovskij:

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

Si scopre che il metodo funziona correttamente, ma il debugger smette di vederlo per qualche motivo.
Senza il debugger che funziona correttamente, il progetto può essere ritardato per molto tempo. Vorrei che gli sviluppatori prestassero attenzione a questo bug molto probabilmente legato al debugger.

È un sacco di testo, non l'ho letto tutto.
Ma se qualcosa funziona nella versione di debug e non funziona nella release, o viceversa, controllate se tutte le variabili e i campi, specialmente nella classe/struttura, sono stati inizializzati.

 
Mihail Matkovskij:
forse il metodo è in linea, allora non è un problema del debugger, ma del compilatore in modalità debug
 
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%)

A proposito delle funzioni di SymbolInfo che sono libere.

 
TheXpert:
forse il metodo è in linea, allora non è un problema del debugger, ma del compilatore per la modalità debug

Esattamente, il progetto si è rivelato traboccante di macro, sia le mie che quelle dei moduli standard. Forse è per questo che il debugger non sempre riesce a far corrispondere i comandi nel file di debug *.ex5 con le linee nel file sorgente *.mq5 e altri moduli...

 
fxsaber:
Le funzioni SymbolInfo sono libere.

quindi è il costo della funzione stessa, non il costo di passare la stringa per valore, non per riferimento!

La tua versione con la cache è una bella soluzione, se l'esecuzione di questa funzione prende una percentuale significativa del tempo di esecuzione dell'EA (cosa che non credo proprio)

 
Mihail Matkovskij:

Esattamente, il progetto si è rivelato traboccante di macro, sia le mie che quelle dei moduli standard. Forse è per questo che il debugger non sempre riesce a far corrispondere i comandi nel file di debug *.ex5 con le linee nel file sorgente *.mq5 e altri moduli...

se la struttura del vostro file è così complessa che il debugger non può associare un punto di interruzione, allora è un problema del debugger.
 
TheXpert:

è il costo della funzione stessa, non il costo di passare la stringa per valore, non per riferimento!

Questo è quello a cui sono stato portato inizialmente.

Forum sul trading, sistemi di trading automatico e test di strategia

Errori, bug, domande

fxsaber, 2020.05.20 13:24

È meglio avere

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

Nell'ottimizzatore queste funzioni sono chiamate decine di miliardi di volte.


Inoltre, la tua variante con la cache è una bella soluzione, se l'esecuzione di questa funzione prende una percentuale significativa del tempo di esecuzione di un EA (cosa che non credo proprio)

Ad un certo punto, non solo la parte relativa del tempo impiegato diventa importante, ma anche la parte assoluta.