Page 1 sur 1

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

Posté : lun. 05 août 2013 19:43
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

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

Posté : lun. 05 août 2013 21:32
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 ^^

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

Posté : lun. 05 août 2013 22:14
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 ;)

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

Posté : lun. 05 août 2013 22:48
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.

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

Posté : mar. 06 août 2013 11:01
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

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

Posté : mar. 06 août 2013 11:29
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 ?

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

Posté : mar. 06 août 2013 11:43
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 ?