Discussion de l'article "Débogage des programmes MQL5"

 

Un nouvel article Débogage des programmes MQL5 a été publié :

Cet article est principalement destiné aux programmeurs qui ont déjà appris le langage mais qui ne maîtrisent pas encore complètement le développement du programme. Il révèle quelques techniques de débogage et présente une expérience combinée de l'auteur et de nombreux autres programmeurs.

La deuxième étape de débogage utilise Debugger (raccourci F5). Le débogueur lance votre programme en mode émulation en l'exécutant pas à pas. Le débogueur est une nouvelle fonctionnalité de MetaEditor 5, car il est absent de MetaEditor 4. C'est pourquoi il n'y a aucune expérience de son utilisation par les programmeurs passant de MQL4 à MQL5.

L'interface du débogueur comporte trois boutons principaux et trois boutons auxiliaires :

  • Démarrer [F5] - démarrer le débogage.
  • Pause [Break] - interrompt le débogage.
  • Arrêter [Maj+F5] - arrêter le débogage.
  • Entrez dans [F11] - l'utilisateur est déplacé à l'intérieur de la fonction appelée dans cette ligne.
  • Passer au-dessus de [F10] - le débogueur ignore un corps de la fonction appelée dans cette chaîne de caractères et passe à la ligne suivante.
  • Sortir [Shift+F11] - un utilisateur quitte le corps de la fonction dans laquelle il se trouve actuellement.

C'est l'interface du débogueur. Mais comment doit-on l'utiliser ? Le débogage du programme peut commencer à partir de la ligne à laquelle un programmeur a défini la fonction de débogage spéciale DebugBreak(), ou à partir d'un point d'arrêt qui peut être défini en appuyant sur le bouton F9 ou en cliquant sur un bouton spécial de la barre d'outils :

Fig. 2. Définition des points d'arrêt

Fig. 2. Définir des points d'arrêt.

Auteur : Nikolay Demko

 

Ce n'est pas mauvais en soi. Mais.

1. Pas un mot sur lesassertions (assertions), qui sont pourtant d'une aide précieuse lors du débogage.

2. le traceur est controversé, c'est le moins qu'on puisse dire.

3. il faudrait mentionner qu'en raison de l'optimisation (du compilateur) le débogage devient très difficile pour les fonctions simples à cause de l'inlining et suggérer des moyens de contourner cet inconvénient.

 
TheXpert:

Ce n'est pas mauvais en soi. Mais.

1. Pas un mot sur les assertions (assertions), qui sont pourtant d'une aide précieuse lors du débogage.

2. le traceur est controversé, c'est le moins qu'on puisse dire.

3. il faudrait mentionner qu'à cause de l'optimisation (compilateur) le débogage est très difficile pour les fonctions simples à cause de l'inlining et suggérer des moyens de contourner cet inconvénient.

Je vais réfléchir aux points 1 et 3 (peut-être même finaliser l'article), chacun a ses propres méthodes, mais suggérer le traçage (ou plutôt simplement insérer des liens, il y a déjà eu beaucoup de suggestions).
 
TheXpert:

3. il est nécessaire de mentionner qu'en raison de l'optimisation (compilateur), le débogage est très difficile pour les fonctions simples à cause de l'inlining et de suggérer des moyens de contourner cet inconvénient.

Dans le débogueur, l'inlining est complètement désactivé et la visite guidée se fait entièrement par le code source tel qu'il est.

Dans le profileur des dernières versions, il y avait un problème avec le point de contrôle, ce qui réduisait la qualité des rapports, mais il a été corrigé et dans la prochaine version, la semaine prochaine, une nouvelle version avec des rapports plus détaillés sera disponible.

 

Mais ce qui est écrit ici est fondamentalement faux :

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

A la première étape de la compilation, un bytecode universel est stocké, mais lorsqu'il est exécuté dans le terminal, ce bytecode est entièrement traduit à 100% en code natif 32 ou 64 bits avec des optimisations supplémentaires. C'est grâce à la traduction en code natif que nous avons multiplié la vitesse d'exécution des programmes MQL5 par rapport à MQL4.

Le bytecode pur sans traduction en code natif était dans MQL4.

 
Renat:

Dans le débogueur, l'inlining est complètement désactivé et le walkthrough est complètement sur le code source tel qu'il est.

Depuis combien de temps est-ce ainsi ? C'était un gros problème avant. Cela fait un certain temps que je n'ai pas travaillé avec 5ka.
 
TheXpert:
Depuis combien de temps est-ce ainsi ? Avant, c'était un gros problème. Cela fait un moment que je n'ai pas travaillé en 5k.

Depuis le début.

L'incrustation mange la plupart des fonctions et il serait impossible de déboguer avec, même en théorie. Vous avez peut-être travaillé avec les premières versions du débogueur, qui présentaient un certain nombre de problèmes.

 

Et pour le débogage en fin de chaîne ou sans connexion avec le marché ? Avez-vous une solution ? Parce qu'il y a un problème après le "OnTick" avec le debugger, Sur MT4 il y a un"Tick generator", quelque chose comme ça sur mt5 ?

Merci d'avance,

 
Bisemper:

Et pour le débogage en fin de chaîne ou sans connexion avec le marché ? Avez-vous une solution ? Parce qu'il y a un problème après le "OnTick" avec le debugger, Sur MT4 il y a un "Tick generator", quelque chose comme ça sur mt5 ?

Merci d'avance,

Nous pouvons faire une association à ce sujet;-)
 

Je n'utilise pratiquement pas l'otaldka en temps réel en raison du long processus d'arrivée des cotations et de la section graphique requise.

Je suis obligé de pousser Print à l'ancienne et de le surveiller dans le testeur.

Pourtant, le débogueur local ne décolle pas du tout avant Visual Studio. Vous pointez une variable et elle vous donne une valeur, vous pointez une expression comme a+b /s et le résultat apparaît. Dans ME, il est plus facile d'utiliser Print.

 

Nous allons certainement améliorer le débogueur dès que nous aurons terminé la mise à jour de MT4.