Errori, bug, domande - pagina 2748

 
Sergey Dzyublik:

C'è molto testo, non l'ho letto tutto.
Ma se avete qualcosa che funziona nella versione di debug e ancora non funziona nella release, o viceversa, allora controllate se tutte le variabili e i campi, specialmente nella classe/struttura, sono stati inizializzati.

I dati che dovevano essere inizializzati li ho inizializzati. E se qualche dato casuale capita lì, causerà un errore nel programma stesso (per esempio, Array out of range o Invalid pointer). Almeno, non influenzerà il funzionamento del debugger. E aiuta a trovare tali bug.

 
Mihail Matkovskij:

Forse avete questo difetto:

(non risolto da ME5 (build 2390)) ** (nuovo) Debuger, StepInto (F11) e i breakpoint installati non funzionano.

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

Penso che la struttura dei file degli elementi standard UI che uso nel mio progetto sia ancora più complessa del mio lavoro. Dovrei lavorare molto duramente per fare qualcosa del genere. Ma così com'è, prendilo e usalo, come si dice. Se metti tutto insieme, come nel mio caso. Poi, effettivamente, si ottiene qualcosa di complicato. Ma per i programmi di corsa è abbastanza normale.

 
fxsaber:

Inizialmente, questo è stato portato a.


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

Abituatevi ad allocare le variabili in C per un po', ed è una buona abitudine farlo.

Nella prima funzione personalizzata, la struttura MqlTick in ingresso viene passata direttamente alla funzione MQL, senza alcuna allocazione di memoria.
Una tale voce è chiamata cattiva codifica.

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

Nel secondo esempio, viene creata la variabile CurrentTick; la memoria viene allocata per essa.
E questa voce è considerata più corretta.
Poiché la memoria è già allocata, i dati di input vengono elaborati più velocemente, senza costi inutili.

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

Prendi un po' più di C, prenderai l'abitudine di allocare le variabili.

Seguite i vostri consigli e potreste avere almeno una minima idea dell'allocazione.
 
Roman:

...

E quel disco è considerato più corretto.

Contato da chi? Potresti almeno darci prima le misure di velocità.

 
Alexey Navoykov:

Chi sta contando? Potresti almeno darmi una misura della velocità, tanto per cominciare.

Troppa attenzione per un troll.

 
TheXpert:
Se segui il tuo consiglio, potresti avere almeno un assaggio dell'allocazione.

Per allocazione, intendevo l'allocazione della memoria.
Non in senso letterale come una classe.
Una funzione definita dall'utente ha il suo ambito.

 
Alexey Navoykov:

Chi conta? Dovresti almeno dare qualche misura di velocità per cominciare.

Nella pagina precedente fxsaber ha dato le misure.
Ho spiegato perché succede così.
Alloca sempre la memoria, staticamente o dinamicamente.

 
Sergey Dzyublik:

Forse avete questo difetto:

(non risolto da ME5 (build 2390)) ** (nuovo) Debugger, StepInto (F11) e i breakpoint installati non funzionano.

È possibile... Ho provato il metodo int CCheckGroup::itemCheckState(const string item) che ho descritto sopra. E all'inizio il debugger ci va. Ma una volta che esce e basta, il debugger non lo vede più e non funziona nessun breakpoint o "Step with enter". Beh, dovremo accontentarci temporaneamente di Print() e Alert().