[...] Exécuter fonction avant exitcode erreur

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

[...] Exécuter fonction avant exitcode erreur

#1

Message par Vincent31 »

Bonjour à tous !

encore une fois, je m'en remet à vos lumières ; voici mon problème

des erreurs pas facilement anticipables surviennent de temps en temps à l'éxécution de mon script et provoque un exitcode sans même enregistrer mes paramètres.

Ces erreurs sont rares mais potentielles donc je souhaiterais que dès qu'une erreur provoquant un exitcode survienne mes variables soient enregistrées dans un ini.

C'est la partie : -detection d'une erreur quelqu'elle soit provoquant l'exitcode
-appel de la fonction "sauvegarde des variables"
qui me pose problème

j'ai essayé avec

Code : Tout sélectionner

Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc"), $EventError = 0
Func MyErrFunc()
    Local $msg, $HexNumber = Hex($oMyError.number, 8)
    Switch $HexNumber
        Case "_80020009"
            $msg = MsgBox(4 + 16, " Erreur " & $oMyError.scriptline, _
                    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
                    "Risque de doublons" & @LF & @LF & "continuer ?")
            SetError(1, 1)
        Case Else
            $msg = MsgBox(4 + 16, "AutoItCOM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _
                    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
                    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
                    "err.number is: " & @TAB & $HexNumber & @CRLF & _
                    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
                    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
                    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
                    "err.helpcontext is: " & @TAB & $oMyError.helpcontext & @CRLF & @CRLF & _
                    "Continuer ???")
            SetError(1, 9)
    EndSwitch
    If $msg <> 6 Then Exit
EndFunc   ;==>MyErrFunc
mais soit ça n'a rien a voir soit je comprend mal le code car quand je met mes commandes de sauvegarde dans les case ça ne fonctionne pas

merci à tous
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#2

Message par mikell »

ça dépend de l'origine de l'erreur
ObjEvent("AutoIt.Error",...) ne marche qu'avec les objets com
Sur une fonction intégrée Autoit, Un "If @error Then..." suffit en général
Pour une fonction custom, il faut intégrer un SetError() pour qu'en cas d'erreur tu puisses faire un test sur @error
Tu peux aussi mettre des vérifications du genre "If IsArray(...) Then" etc
Une bonne gestion d'erreur c'est pas évident ^^
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Sea
Niveau 6
Niveau 6
Messages : 219
Enregistré le : ven. 22 juin 2012 18:51
Localisation : France
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#3

Message par Sea »

Pas évident et surtout très long perso dans mes scripts la gestion des erreurs est souvent plus longue que le script en lui même.
Mais bon ceci te permet de voir exactement la où ça bug lorsque ton programme est publique et c'est bien connu le publique fais toujours des choses que tu n'aurais pas imaginer qu'ils fassent et ce qui provoque souvent des problèmes si les erreurs sont mal géré.

Bref mon post n'étais qu'un petit rajout de celui de mikell pour te dire l'importance de faire ça ;)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#4

Message par jchd »

des erreurs pas facilement anticipables surviennent de temps en temps à l'éxécution de mon script
C'est là qu'il faut passer du temps et corriger ce qui peut déraper. Pas après qu'une erreur fatale soit survenue.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#5

Message par Vincent31 »

d'accord je comprends donc que la diversité de la nature des erreurs ne permet pas de gérer une erreur simplement en tant qu'erreur et donc ma requête qui consiste à effectuer une sauvegarde des variables des qu'une erreur quelle que soit sa nature n'est pas possible : il faut absolument connaitre sa nature et d'où elle vient.


Je laisse le post ouvert si j'ai des questions sur les erreurs je vais ouvrir un dossier erreur :D si vous avez sous la main des bon topic ou tuto sur ça je prends

merci
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#6

Message par Vincent31 »

je viens d'avoir une idée (qu'elle soit bonne ou mauvaise ça reste une idée :) )

serait-ce envisageable de partager un array entre 2 scripts.
je m'explique : si je déclare un array dans le premier script : $array1 dans lequel je stock les valeurs de toutes mes variables et qu'un deuxième script qui peut lire cette array "en fait une copie" $array2 alors dès qu'il y a une erreur fatale sur le premier script le second
(je pense que le second script peut détecter si il y a eu exitcode à travers le gui du premier script ?)
relance le premier script qui va lire $array2, inhiber $array1.

Dans le principe ça ne pose aucun problème à l’exécution de mon programme il peut être arrête fatalement et relancé du moment que les variables sont à jours.

Je suis conscient qu'il s'agit là d'une gestion d'erreur un peu sauvage, mais serait-ce envisageable ?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [...] Exécuter fonction avant exitcode erreur

#7

Message par jchd »

Cent fois, mille fois plus complexe et plus piégeant que de traiter les erreurs dans le script, comme on doit le faire normalement pour tout programme.

Ton problème revient à dire : voilà, ma centrale nucléaire explose de temps en temps et je ne veux pas y implanter les capteurs et les procédures nécessaires pour éviter ces désastres. Comment puis-je accrocher un filin d'acier qui lève un drapeau rouge dans un tel cas, pour informer le public qu'il va crever ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre