Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1429 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  mécanismes de gestion des erreurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mécanismes de gestion des erreurs

n°237029
lorill
Posté le 30-10-2002 à 00:18:17  profilanswer
 

Bon, je recherche pas de code, ni quoi que ce soit, juste des idées. Alors je vais recapituler ce que je connais, et si vous avez des trucs a ajouter ca serait sympa de le faire.
 
- méthode primitive :  
une fonction renvoie une valeur, et on se base sur celle ci pour savoir si une erreur a eu lieu.
 
- methode un peu plus descriptive :
comme la primitive, mais un code d'erreur est renseigné dans une variable globale (errno en C)
 
- goto :
basic style, on error goto truc, et on a aussi un numero d'erreur
 
- exceptions simples (goto amélioré)
cas de PL/SQL, les exceptions sont en fait des labels, vers lesquels on saute en cas d'erreur.
 
- exceptions
cas de la plupart des langages modèrnes, une fonction renvoi un objet un peu particulier qui contient un descriptif de l'erreur.
 
Alors en fait, ma question, c'est est-ce qu'il y a encore plus évolué que les exceptions ? Et si oui, avez vous des docs la dessus ?


Message édité par lorill le 30-10-2002 à 00:19:17
mood
Publicité
Posté le 30-10-2002 à 00:18:17  profilanswer
 

n°237033
barbarella
Posté le 30-10-2002 à 00:35:50  profilanswer
 

lorill a écrit a écrit :

Bon, je recherche pas de code, ni quoi que ce soit, juste des idées. Alors je vais recapituler ce que je connais, et si vous avez des trucs a ajouter ca serait sympa de le faire.
 
- méthode primitive :  
une fonction renvoie une valeur, et on se base sur celle ci pour savoir si une erreur a eu lieu.
 
- methode un peu plus descriptive :
comme la primitive, mais un code d'erreur est renseigné dans une variable globale (errno en C)
 
- goto :
basic style, on error goto truc, et on a aussi un numero d'erreur
 
- exceptions simples (goto amélioré)
cas de PL/SQL, les exceptions sont en fait des labels, vers lesquels on saute en cas d'erreur.
 
- exceptions
cas de la plupart des langages modèrnes, une fonction renvoi un objet un peu particulier qui contient un descriptif de l'erreur.
 
Alors en fait, ma question, c'est est-ce qu'il y a encore plus évolué que les exceptions ? Et si oui, avez vous des docs la dessus ?




 
dans certain projet il est interessant de connaitre la source du plantage, la fonction ou le script qui appelle la fonction qui plante.
 

n°237034
lorill
Posté le 30-10-2002 à 00:37:17  profilanswer
 

barbarella a écrit a écrit :

 
dans certain projet il est interessant de connaitre la source du plantage, la fonction ou le script qui appelle la fonction qui plante.




ben dans les systèmes avec exception, c'est ce que j'appelle le descriptif de l'erreur. Y'a moyen d'avoir ces infos avec d'autres systèmes ?

n°237039
zion
Plop
Posté le 30-10-2002 à 00:51:22  profilanswer
 

Oui, avec des "assertion"
 
Avec ca tu as la ligne d'erreur dans ton source directement, pratique quand tu distribues un soft.  
 


---------------
Informaticien.be - Lancez des défis à vos amis
n°237040
zion
Plop
Posté le 30-10-2002 à 00:52:23  profilanswer
 

Voila ce que ca donne en pascal
 
 

Citation :

Tests whether a Boolean expression is true.
 
Unit
 
System
 
Category
 
miscellaneous routines
 
procedure Assert(expr : Boolean [; const msg: string]);
 
Description
 
Use Assert as a debugging tool to test that conditions assumed to be true are never violated. Assert provides an opportunity to intercept an unexpected condition and halt a program rather than allow execution to continue under unanticipated conditions.
 
Assert takes a Boolean expression and an optional message string as parameters. If the Boolean test fails, Assert raises an EAssertionFailed exception. If a message string was passed to Assert, the exception object is created with that string. Otherwise it is created with a default string indicating that the assertion failed. The message is displayed along with the complete path, filename, and the line number on which Assert failed.
 
The SysUtils unit causes runtime errors to be turned into exceptions. If SysUtils is not used anywhere in your application, you will get a runtime error 227 rather than an EAssertionFailed exception. This runtime error will halt the program.
 
Because assertions are not usually used in shipping versions of a product, compiler directives are provided to disable the generation of assertion code:
 
$ASSERTIONS ON/OFF (long form)
$C +/- (short form)
 
These are global switches that affect the entire source file where they occur, regardless of their position in the file. It is not possible to enable and disable assertions for something smaller than a source file. Assertions are on by default.


---------------
Informaticien.be - Lancez des défis à vos amis
n°237041
lorill
Posté le 30-10-2002 à 00:55:46  profilanswer
 

zion a collé une doc sur les assertions a écrit :

 




 
Merci, mais c'est plus de la prévention en fait.
En gros, ca teste, et si c'est faux une exception est lancée. Rien de bien extraordinaire, donc.

n°237043
zion
Plop
Posté le 30-10-2002 à 00:57:20  profilanswer
 

Ah si, tu sais dans quel source et à quelle ligne tu as un problème, pas besoin de te casser les burnes pour savoir ou tu as balancé l'exception.


---------------
Informaticien.be - Lancez des défis à vos amis
n°237044
lorill
Posté le 30-10-2002 à 00:58:31  profilanswer
 

zion a écrit a écrit :

Ah si, tu sais dans quel source et à quelle ligne tu as un problème, pas besoin de te casser les burnes pour savoir ou tu as balancé l'exception.




Ben ca java le fait aussi, python aussi, ruby aussi, et sans doute pas mal d'autre. En fait doit y avoir que C++ qui le fait pas (et j'en suis même pas sur) :D

n°237045
zion
Plop
Posté le 30-10-2002 à 00:59:23  profilanswer
 

Ouai, enfin ici tu as une distinction entre excpetion et assertion.  Tu veux qu'on parle mécanisme de gestion des erreurs, donc on parle  :kaola:


---------------
Informaticien.be - Lancez des défis à vos amis
n°237046
lorill
Posté le 30-10-2002 à 01:02:18  profilanswer
 

zion a écrit a écrit :

Ouai, enfin ici tu as une distinction entre excpetion et assertion.  Tu veux qu'on parle mécanisme de gestion des erreurs, donc on parle  :kaola:  




te fâche pas, va :)
 
n'empeche que assert(toto == tata) c'est la même chose que if(toto != tata) throw new AssertionException("message" ), non ?
 
donc d'un point de vue implémentation c'est juste une instruction supplémentaire, j'ai bon ?

mood
Publicité
Posté le 30-10-2002 à 01:02:18  profilanswer
 

n°237048
zion
Plop
Posté le 30-10-2002 à 01:06:33  profilanswer
 

lorill a écrit a écrit :

 
n'empeche que assert(toto == tata) c'est la même chose que if(toto != tata) throw new AssertionException("message" ), non ?




 
Benh non, une exception tu sais pas ou elle a été balancée (oui en java, gnagnagna), mais sur le principe, si il te dit la ligne exacte ou a été balancée l'exception, je m'en fous, moi je veux savoir ou elle a été causée plutot (genre un double free, je veux que ca plante la ou je tape le free, pas dans le free).
 
Et ici, l'assertion ca te permet de prévenir et le compilo gère pour toi la ligne et tout le toutim.  
 
Mais a part les exceptions/assertions, je vois rien de mieux  :sweat:


---------------
Informaticien.be - Lancez des défis à vos amis
n°237049
lorill
Posté le 30-10-2002 à 01:11:11  profilanswer
 

ok, donc en fait ca permet de pallier au manque d'infos disponibles pour les langages compilés si je comprends bien.  
Pour ton info, dans le cas des langages que j'ai cité, tu n'as pas que la ligne où a été créée l'exception, mais tout le chemin qu'elle a parcouru.

n°237051
zion
Plop
Posté le 30-10-2002 à 01:16:10  profilanswer
 


Euh, ca, tu sais aussi l'avoir ici, le groupe pour lequel je bosse quand j'ai un peu de temps libre a fait un compo pour ca... Tu le balances sur ton application, il récupère les appels sur le stack, les valeurs des registres, etc, etc, et il propose un joli dialogue pour envoyer un mail.
 
Je devrais l'utiliser tiens  :ange:


---------------
Informaticien.be - Lancez des défis à vos amis
n°237088
HelloWorld
Salut tout le monde!
Posté le 30-10-2002 à 09:21:06  profilanswer
 

Les assertion ca marche qu'en debug il me semble ... pas sur la version du client.
Sinon y'a le core dump. Le client te l'envoit, tu lances ton debuggueur et te voila sur l'erreur.
Y'a les signaux sous Unix, le SEH sous Windows, ...
Y'a les watchdog aussi. C'est utilisé dans les systèmes embarqués ou personne n'est là pour faire un reset. Si une boucle infinie bloque trop longtemps fiout on reset !
Justement, j'ai récemment eu mon premier ecran bleu WinXP ... mon ordi a freezé et puis au bout d'une dizaines de secondes, ecran bleu, le watchdog me dit ou a eu lieu l'erreur. Pas mal !
http://www.chez.com/regatbar/bsod%20xp/BSOD_XP.htm


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°237089
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-10-2002 à 09:23:38  profilanswer
 

zion a écrit a écrit :

et il propose un joli dialogue pour envoyer un mail.
 
Je devrais l'utiliser tiens  :ange:  




 
c'est quel compo :??: je devrais l'utiliser aussi :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°237273
zion
Plop
Posté le 30-10-2002 à 14:51:27  profilanswer
 

antp a écrit a écrit :

 
 
c'est quel compo :??: je devrais l'utiliser aussi :D




 
Je sais plus, c'est dans la JCL. JclDebug je dirais  :)  
 
Sinon si, les assertions ca marche sur la version finale de l'utilisateur aussi, bien qu'on préfère les désactiver vu que le mec il est pas censé avoir ce genre d'informations  :D  
 
Sinon y a aussi le remote debug avec Delphi, j'ai pas encore eu le temps de tester mais ca a l'air sympa...


---------------
Informaticien.be - Lancez des défis à vos amis
n°237343
BifaceMcLe​OD
The HighGlandeur
Posté le 30-10-2002 à 15:51:23  profilanswer
 

lorill> Ta description des différents mécanismes d'erreur me semble incomplète, car le mécanisme de récupération sur erreur est aussi important que le mécanisme de déclenchement de l'erreur. C'est même le mécanisme de récupération qui différencie ces mécanismes et rend l'un meilleur que l'autre.
 
Ainsi, normalement, une assertion est irrécupérable : le programme s'arrête si elle n'est pas vérifiée, point (Java est un mauvais exemple en matière d'assertion, puisqu'il l'assimile à une exception).
 
Par ailleurs, le ON ERROR GOTO ou ON ERROR GOSUB du BASIC, suivi d'un RESUME pour revenir au mode de fonctionnement normal, est très différent du mécanisme des exceptions, puisque l'instruction RESUME va tenter de ré-exécuter l'instruction qui a déclenché l'erreur. Alors que pour les exceptions, on quitte le code en cours pour aller directement à l'appelant (ou le bloc traite-exception encapsulant).
 
Pour finir et pour répondre à la dernière question de ton premier post, à ma connaissance, il n'y a pas actuellement de mécanisme de récupération sur erreur plus souple (et ausii simple) que celui qu'offre les exceptions.

n°237355
lorill
Posté le 30-10-2002 à 15:59:10  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 




Merci, c'est vrai que j'ai complétement occulté les différences en ce qui concerne le retour au code après erreur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  mécanismes de gestion des erreurs

 

Sujets relatifs
[HELP NEEDED] programme permettant la gestion d'un emploi du tempsgestion d'une Iframe..le opener ne semble pas fonctionner??
[C] Débutant: je trouve pas les erreurs !!Saut à la ligne en gestion de fichiers txt
Gestion de l'affichage des pages HTML sous IE[mysql/php] architecture de site et gestion dune base de donnée
ouvrir une nouvelle fenetre automatiquement + gestion des variables ?graphique en java, gestion du zoom et du repere
Access - VB gestion champs remplis ou nonProgrammation c++ et gestion de base de donnees sql sur palm
Plus de sujets relatifs à : mécanismes de gestion des erreurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR