Discussione sull’articolo "Debug dei programmi MQL5"

 

Il nuovo articolo Debug dei programmi MQL5 è stato pubblicato:

Questo articolo è destinato principalmente ai programmatori che hanno già imparato il linguaggio ma non padroneggiano completamente lo sviluppo del programma. Rivela alcune tecniche di debug e presenta un'esperienza combinata dell'autore e di molti altri programmatori.

La seconda fase di debug utilizza Debugger (tasto rapido F5). Il debugger avvia il programma in modalità emulazione eseguendolo passo passo. Debugger è una nuova funzionalità di MetaEditor 5, poiché è assente in MetaEditor 4. Ecco perché non c'è esperienza di utilizzo da parte dei programmatori che passano da MQL4 a MQL5.

L'interfaccia del debugger ha tre pulsanti principali e tre ausiliari:

  • Avvia [F5] - avvia il debug.
  • Pausa [Break] - mette in pausa il debug.
  • Stop [Shift+F5] - interrompe il debug.
  • Entra in [F11] - l'utente viene spostato all'interno della funzione chiamata in questa riga.
  • Passa sopra [F10] - il debugger ignora un corpo della funzione chiamata in questa stringa e passa alla riga successiva.
  • Esci [Shift+F11] - un utente esce dal corpo della funzione in cui si trova attualmente.

Questa è l'interfaccia del debugger. Ma come dovremmo usarlo? Il debug del programma può iniziare dalla riga, in cui un programmatore ha impostato una funzione di debug DebugBreak() speciale, o da un punto di interruzione che può essere impostato premendo il pulsante F9 o facendo clic su un pulsante speciale sulla barra degli strumenti:

Fig. 2. Impostazione dei breakpoint

Fig. 2. Impostazione dei punti di interruzione.

Autore: Nikolay Demko

 

Non è male, di per sé. Ma.

1. Non una parola sulleasserzioni (assertions), che sono di enorme aiuto durante il debug.

2. il tracciatore è a dir poco controverso.

3. Si dovrebbe dire che a causa dell'ottimizzazione (del compilatore) il debugging diventa molto difficile per le funzioni semplici a causa dell'inlining e suggerire modi per aggirare questo inconveniente.

 
TheXpert:

Non è male, di per sé. Ma.

1. Non una parola sulle asserzioni (assertions), che sono di enorme aiuto durante il debug.

2. il tracciatore è a dir poco controverso.

3. Si dovrebbe menzionare che a causa dell'ottimizzazione (compilatore) il debugging è molto difficile per le funzioni semplici a causa dell'inlining e suggerire modi per aggirare questo inconveniente.

Penserò ai punti 1 e 3 (forse finalizzerò anche l'articolo), ognuno ha molti metodi propri, ma suggerite il tracciamento (o piuttosto inserite dei link, ci sono già stati molti suggerimenti).
 
TheXpert:

3. è necessario menzionare che a causa dell'ottimizzazione (compilatore) il debug è molto difficile per le funzioni semplici a causa dell'inlining e suggerire modi per aggirare questo svantaggio.

Nel debugger, l'inlining è completamente disabilitato e il walkthrough è completamente da codice sorgente così com'è.

Nel profiler delle ultime build c'era un problema con il checkpoint, che riduceva la qualità dei rapporti, ma è stato risolto e nella prossima build della settimana prossima sarà disponibile una nuova versione con rapporti più dettagliati.

 

Ma ciò che è scritto qui è fondamentalmente sbagliato:

Хочу отдельно отметить, что компилятор MetaEditor транслирует программы в байт-код, а не нативный код (подробнее читаем по ссылке). Это дает возможность создавать защищенные шифрованием программы, не боясь взлома. Также преимуществом такой трансляции является то, что байт-код может быть запущен как в 32-х битной версии операционной системы, так и в 64-х битной.

Nella prima fase di compilazione, viene memorizzato un bytecode universale, ma quando viene eseguito nel terminale, questo bytecode viene tradotto al 100% in codice nativo a 32 o 64 bit con un'ulteriore ottimizzazione. È grazie alla traduzione in codice nativo che abbiamo moltiplicato la velocità di esecuzione dei programmi MQL5 rispetto a MQL4.

Il puro bytecode senza traduzione in codice nativo era presente in MQL4.

 
Renat:

Nel debugger, l'inlining è completamente disabilitato e la guida è completamente sul codice sorgente.

Da quanto tempo è così? Una volta era un grosso problema. È passato un po' di tempo da quando ho lavorato in 5ka.
 
TheXpert:
Da quanto tempo è così? Una volta era un grosso problema. È solo che è passato un po' di tempo da quando ho lavorato in 5k.

Fin dall'inizio.

L'inlining si mangia la maggior parte delle funzioni e sarebbe impossibile fare il debug con esso, anche solo in teoria. Forse avete lavorato solo con le prime versioni del debugger, dove c'erano diversi problemi.

 

E per il debug durante il weed end o senza connessione con il mercato? Avete una soluzione? Perché c'è un problema dopo il "OnTick" con il debugger, su MT4 c'è un"Tick generator", qualcosa di simile su mt5?

Grazie in anticipo,

 
Bisemper:

E per il debug durante il weed end o senza connessione con il mercato? Avete una soluzione? Perché c'è un problema dopo il "OnTick" con il debugger, su MT4 c'è un "Tick generator", qualcosa di simile su mt5?

Grazie in anticipo,

Possiamo fare un'associazione su questo;-)
 

Praticamente non uso l'otaldka in tempo reale a causa del lungo processo di arrivo delle quotazioni e della sezione grafica richiesta.

Devo usare la stampa alla vecchia maniera e monitorarla nel tester.

Inoltre, il debugger locale non decolla affatto prima di Visual Studio. Puntate a una variabile e vi darà un valore, puntate a un'espressione come a+b /s e il risultato apparirà. In ME è più facile usare Print.

 

Miglioreremo sicuramente il debugger non appena avremo terminato l'aggiornamento della MT4.