Erreurs, bugs, questions - page 822

 
falkov:

Oui, bien sûr, et alors. J'ai soumis l'endroit à toutes sortes de contrôles.

Je connais l'endroit, je ne comprends pas pourquoi ça arrive !

Je vérifie la taille du tableau avant cette ligne et d'autres variables pour les aberrations.

Mais le conseiller expert continue de se bloquer plusieurs fois par semaine.

C'est très probablement mon erreur, et je ne suis pas contre. Je suis contre le fait que je n'ai aucun mécanisme pour savoir où le chien est enterré.

En même temps, il existe un mécanisme d'exclusion simple et pratique. Ils ont été introduits juste pour de tels cas.

Renat m'a répondu que s'ils introduisent ce mécanisme, les programmeurs imprudents commenceront immédiatement à faire des erreurs et ils devront faire le ménage.

C'est un argument grotesque, à mon avis.

Eh bien, la position de MetaQuotes sur les exceptions est bien connue et irrévocable (j'en ai discuté moi-même avec eux il y a deux ans), alors nous faisons avec ce que nous avons. Cela aurait été plus utile si certaines de vos sources avaient été montrées.
 

À propos, au lieu de recourir aux exceptions, vous pouvez mettre en œuvre un simple gestionnaire d'événements OnError, comme ceci :

bool OnError(uint errorcode, string filename, uint lineno, uint colno, string context)
{
  ...
  if(critical)
  {
    return(true); // для подтверждения остановки выполнения скрипта
  }
  else
  {
    return(false); // для продолжения выполнения на чарте (текущий вызов прерывается, но следующие тики/таймеры и пр. работают)
  }
}
 
Utilisez le vérificateur de code intégré, les mêmes assertions.
 
marketeer:

À propos, au lieu de recourir aux exceptions, vous pouvez mettre en œuvre un simple gestionnaire d'événements OnError, comme ceci :


Je pense que cela m'aurait satisfait, mais pas complètement, car j'aurais eu besoin de déclarer les variables requises comme globales pour être visibles dans OnError.

Mais je serais quand même heureux avec ça. Parfois, il suffit d'attraper une erreur, après avoir trouvé et corrigé le problème, vous pouvez les cacher à nouveau dans le local.

Comment pourrait-on transmettre cette idée sur OnError à Renat ?

 
falkov:

Je pense que cela m'a satisfait, mais pas complètement, car il aurait été nécessaire de déclarer les variables requises comme globales pour être visibles dans OnError.

Mais j'en aurais été heureux de toute façon. Il suffit parfois d'attraper une erreur. Après avoir trouvé et corrigé le problème, vous pouvez à nouveau les cacher en local.

Comment faire passer cette idée de OnError à Renat ?

Pas par principe. Si un programme rencontre une erreur critique, son destin est seulement d'être déchargé.

Chaque fonction importante dispose de codes de retour, tout est détaillé. Ainsi, le développeur ne perd pas le contrôle de son programme.

ps : il est bien sûr étonnant d'entendre "pas assez !" même après une indication claire de l'emplacement de la mauvaise indexation.

 
TheXpert:
Utilisez le contrôle de code intégré, les mêmes assertions.

Eh bien, la situation ici est différente. Une personne présente une erreur sporadique (qui se reproduit rarement dans des conditions peu claires). Le conseiller expert se plante quand même. S'il définit Assert, il obtiendra la même erreur mais pas immédiatement et la raison ne sera pas claire. C'est pourquoi je lui demande de me montrer le code.

Enfin, il pourrait être utile que les erreurs qui provoquent l'arrêt du script soient accompagnées non seulement de l'emplacement, mais aussi du contexte complet : pile d'appels, contenu des variables, etc. Vous pouvez rendre cette sortie optionnelle à l'aide d'une directive du préprocesseur, c'est-à-dire spécifier le niveau de diagnostic d'erreur : laissez-le tel quel par défaut mais autorisez-le à être similaire.

Документация по MQL5: Основы языка / Препроцессор
Документация по MQL5: Основы языка / Препроцессор
  • www.mql5.com
Основы языка / Препроцессор - Документация по MQL5
 
marketeer:

Eh bien, la situation ici est différente. Une personne présente une erreur sporadique (qui se reproduit rarement dans des conditions peu claires). Le conseiller expert se plante quand même. S'il définit Assert, il obtiendra la même erreur mais pas immédiatement et on ne saura pas pourquoi. C'est pourquoi je lui demande de me montrer le code.

Enfin, il pourrait être utile que les erreurs qui provoquent l'arrêt du script soient accompagnées non seulement de l'emplacement, mais aussi du contexte complet : pile d'appels, contenu des variables, etc. Il est possible de rendre cette sortie optionnelle à l'aide d'une directive du préprocesseur, c'est-à-dire de spécifier le niveau de diagnostic des erreurs : laissez-le tel qu'il est par défaut, mais faites en sorte qu'il puisse être incrémenté.

Le contexte complet peut être retracé pendant le débogage.

Par ailleurs, les erreurs sporadiques doivent être capturées à certains fragments.

Et c'est là que le besoin se fait sentir. Lancer le débogueur sur l'historique.

Le problème est ancien et a été soulevé à de nombreuses reprises, mais il est toujours là.

 
marketeer:

Eh bien, la situation ici est différente. Une personne présente une erreur sporadique (qui se reproduit rarement dans des conditions peu claires). Le conseiller expert se plante quand même. S'il définit Assert, il obtiendra la même erreur mais pas immédiatement et on ne saura pas pourquoi. C'est pourquoi je lui demande de me montrer le code.

95% des erreurs sporadiques sont liées à des erreurs d'initialisation ou à l'absence d'initialisation. Ainsi, un fragment de code ne vous aidera pas et le code entier ne vous donnera pas la réponse par paranoïa ;-)

La raison doit être recherchée très loin du lieu de la manifestation, et il est ennuyeux pour un aphthar de demander simplement que les développeurs soient abattus. Cela aidera certainement.

// Cela va vraiment aider, falkov ? : )

 
Urain:

Le contexte complet peut être tracé par le débogage.

Une autre chose est que les erreurs sporadiques doivent être capturées à certains fragments.

Et c'est là que le besoin se fait sentir. Lancer le débogueur sur l'historique.

Le problème est ancien et a été soulevé à de nombreuses reprises, mais il est toujours là.

C'est également vrai, cela aiderait beaucoup, quelle que soit la nature de l'erreur.
 
marketeer:

Eh bien, la situation ici est différente. Une personne présente une erreur sporadique (qui se reproduit rarement dans des conditions peu claires). Le conseiller expert se plante quand même. S'il définit Assert, il obtiendra la même erreur mais pas immédiatement et la raison ne sera pas claire. C'est pourquoi je lui ai demandé de me montrer le code.

Il ne sert à rien de montrer le code, parce qu'il y a une logique assez compliquée, qui a besoin de la comprendre, et la section d'erreur elle-même est simple, mais elle ne donne rien pour trouver l'erreur, il y a un demi-écran de code pur. Les limites de chaque variable sont vérifiées en bas et en haut. Si la variable dépasse ces limites, un message s'affiche, énumérant toutes les variables et leurs valeurs. Bien sûr, il y a une erreur quelque part, mais c'est là ! !! Permettez-moi de vous rappeler que cela se produit une ou deux fois par semaine. Le conseiller expert a travaillé 24 heures sur 24.

Et puis, je ne m'intéresse pas seulement à ce cas particulier, même si c'est la première fois que je le fais.

Et une dernière chose, il serait peut-être utile que ces erreurs qui provoquent l'arrêt du script soient accompagnées non seulement de l'emplacement, mais aussi du contexte complet : pile d'appels, contenu des variables, etc. Vous pourriez rendre cette sortie optionnelle en utilisant une directive du préprocesseur, c'est-à-dire spécifier le niveau de diagnostic des erreurs : laissez-le tel quel par défaut, mais permettez de le rendre plus complexe.

Ce serait génial ! Un contexte complet me permettrait certainement de trouver l'erreur ! Ce dont j'ai besoin, c'est de regarder les variables au moment de l'erreur, avant que le conseiller expert ne parte.

Cher Renat ! Vous pouvez peut-être faire ça ?

Raison: