 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ben Guest
|
Posted: Wed Aug 27, 2003 9:47 am Post subject: Recuperation de toutes les erreurs d'execution. |
|
|
Voila, je cherche a creer un programme capable de capturer toutes les
erreurs possibles d'execution (division par 0, mauvais pointeur, ...) et
d'afficher un message detaillant precisement l'erreur.
pour cela j'ai pense a quelque chose comme ca :
try{
instructions;
}
catch(...)
{
printf("Erreurn");
}
J'arrive belle et bien a capturer toutes les erreurs grace au catch(...)
mais l'ennuie est que je n'ai aucun moyen de savoir ce qui s'est passe et
d'afficher un message plus detaille que "Erreur". J'aimerai avoir une
description de l'erreur mais comment cela est possible?
Merci.
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Wed Aug 27, 2003 12:53 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Le Mercredi 27 Août 2003 11:47, Ben a écrit :
| Quote: | Voila, je cherche a creer un programme capable de capturer toutes les
erreurs possibles d'execution (division par 0, mauvais pointeur, ...) et
d'afficher un message detaillant precisement l'erreur.
|
Je ne crois pas qu'il soit possible de détecter ce type d'erreur en C++
standard.
Par contre, tu peux implémenter une méthode spécifique à ton OS. Par
exemple, sous GNU/Linux (ou tout autre OS POSIX), tu peux "attraper" les
signaux correspondants (notamment SIGSEGV pour "mauvais pointeur").
Sous Windows, il doit exister une méthode analogue.
Tu peux déjà attraper toutes les erreurs "standards" (générées par la
bibliothèque standard) en utilisant un "catch (std::exception& e)", la
description est dans "e.what()".
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Ben Guest
|
Posted: Wed Aug 27, 2003 1:44 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Oui mais je ne pense pas qu'avec cette solution je sois capable de detecter
les erreurs innatendues du type division par 0 ou autres.
"Frédéri MIAILLE" <bobranger_no_spam (AT) wanadoo (DOT) fr> wrote
| Quote: |
"Ben" <serbenet (AT) free (DOT) fr> a écrit dans le message de
news:3f4c7e4a$0$16530$626a54ce (AT) news (DOT) free.fr...
Voila, je cherche a creer un programme capable de capturer toutes les
erreurs possibles d'execution (division par 0, mauvais pointeur, ...) et
d'afficher un message detaillant precisement l'erreur.
pour cela j'ai pense a quelque chose comme ca :
try{
instructions;
}
catch(...)
{
printf("Erreurn");
}
try{
// ... instructions;
if(Cafoire)
{
MaStuctureDerreur Diantre;
Diantre.Str="Une merde s'est produite et là, on constate que
CaFoire
est vrai.";
Diantre.Ligne=__LINE__;
Diantre.Heure=MonHeure;
Diantre.CodeErreur=54768742486784541511250054870578;
}
throw Diantre;
}
catch(MaStuctureDerreur &CaTombeIci)
{
printf("%s, %s, %d, %s, %dn", CaTombeIci.Str, CaTombeIci.Ligne,
CaTombeIci.Heure, CaTombeIci.CodeErreur);
}
J'arrive belle et bien a capturer toutes les erreurs grace au catch(...)
mais l'ennuie est que je n'ai aucun moyen de savoir ce qui s'est passe
et
d'afficher un message plus detaille que "Erreur". J'aimerai avoir une
description de l'erreur mais comment cela est possible?
Merci.
En gros, pour avoir plus de descriptions.... il faut se démerder. Et je
trouve ça pas mal, ça donne un bon contrôle sur le programme.
--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation
|
|
|
| Back to top |
|
 |
Ben Guest
|
Posted: Wed Aug 27, 2003 1:46 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
J'utilise vc++ et "catch (std::exception& e)" ne semble pas possible (je ne
peux pas compiler).
"Vincent Richard" <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote in
message news:3f4caa86$0$260$626a54ce (AT) news (DOT) free.fr...
| Quote: | Le Mercredi 27 Août 2003 11:47, Ben a écrit :
Voila, je cherche a creer un programme capable de capturer toutes les
erreurs possibles d'execution (division par 0, mauvais pointeur, ...) et
d'afficher un message detaillant precisement l'erreur.
Je ne crois pas qu'il soit possible de détecter ce type d'erreur en C++
standard.
Par contre, tu peux implémenter une méthode spécifique à ton OS. Par
exemple, sous GNU/Linux (ou tout autre OS POSIX), tu peux "attraper" les
signaux correspondants (notamment SIGSEGV pour "mauvais pointeur").
Sous Windows, il doit exister une méthode analogue.
Tu peux déjà attraper toutes les erreurs "standards" (générées par la
bibliothèque standard) en utilisant un "catch (std::exception& e)", la
description est dans "e.what()".
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Wed Aug 27, 2003 2:01 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Le Mercredi 27 Août 2003 15:46, Ben a écrit :
| Quote: | J'utilise vc++ et "catch (std::exception& e)" ne semble pas possible (je
ne peux pas compiler).
|
#include <stdexcept>
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Ben Guest
|
Posted: Wed Aug 27, 2003 2:08 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
OK thank you
I found the way as well by including <exception>, it seems to work.
"Vincent Richard" <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote in
message news:3f4cba77$0$239$626a54ce (AT) news (DOT) free.fr...
| Quote: | Le Mercredi 27 Août 2003 15:46, Ben a écrit :
J'utilise vc++ et "catch (std::exception& e)" ne semble pas possible (je
ne peux pas compiler).
#include <stdexcept
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
|
| Back to top |
|
 |
Ben Guest
|
Posted: Wed Aug 27, 2003 2:14 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Bon ca marche mais en fait je viens de voir que division par zero n'est pas
std::exception donc retour au meme point.
"Ben" <serbenet (AT) free (DOT) fr> wrote
| Quote: | OK thank you
I found the way as well by including <exception>, it seems to work.
"Vincent Richard" <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in
message news:3f4cba77$0$239$626a54ce (AT) news (DOT) free.fr...
Le Mercredi 27 Août 2003 15:46, Ben a écrit :
J'utilise vc++ et "catch (std::exception& e)" ne semble pas possible
(je
ne peux pas compiler).
#include <stdexcept
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Wed Aug 27, 2003 2:51 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Le Mercredi 27 Août 2003 16:14, Ben a écrit :
| Quote: | Bon ca marche mais en fait je viens de voir que division par zero n'est
pas std::exception donc retour au meme point.
|
Non, cf. ma réponse plus haut.
Il n'y a apparemment (quelqu'un peut confirmer ?) pas de solution standard
pour détecter ce genre d'erreur (qui est plutôt au niveau du système
d'exploitation sur lequel s'exécute ton programme).
Donc, il faut voir du côté de l'API de ton système. Il existe sans aucun
doute des solutions pour intercepter/être notifié de ces erreurs... Dans
ce cas, c'est HS sur ce groupe.
<HS>
Sous Windows, il me semble que tu peux utiliser le SEH (Structured
Exception Handling). Recherche sur Google pour plus d'infos.
Par exemple :
* http://www.drbob42.com/cbuilder/structur.htm
* http://msdn.microsoft.com/library/en-us/debug/base/using_an_excep
--8<-- tion_handler.asp?frame=true (attention, adresse sur 2 lignes)
* ...
* http://www.google.fr/search?hl=fr&q=structured+exception+handling
Peut-être voir sur : news:fr.comp.os.ms-windows.programmation .
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Frédéri MIAILLE Guest
|
Posted: Wed Aug 27, 2003 3:19 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
alors ce que Vincent disait à savoir :
"Tu peux déjà attraper toutes les erreurs "standards" (générées par la
bibliothèque standard) en utilisant un "catch (std::exception& e)", la
description est dans "e.what()"."
devrait suffire.
Car je suppose que la division par 0 doit générer une exception en bonne et
dûe forme. Sinon, généralement on contrôle. Ca peut se faire "inline" avec
un "?".
--
Frédéri MIAILLE
fr.comp.lang.c
fr.comp.lang.c++
fr.comp.os.ms-windows.programmation
fr.comp.graphisme.programmation
|
|
| Back to top |
|
 |
Serge Paccalin Guest
|
Posted: Wed Aug 27, 2003 3:56 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Le mercredi 27 août 2003 à 16:14, Ben a écrit dans fr.comp.lang.c++ :
| Quote: | J'utilise vc++ et "catch (std::exception& e)" ne semble pas possible (je
ne peux pas compiler).
#include <stdexcept
OK thank you
I found the way as well by including
Bon ca marche mais en fait je viens de voir que division par zero n'est pas
std::exception donc retour au meme point.
|
[Tu peux répondre en-dessous, s'il te plaît ? Le français se lit de haut
en bas...]
Si tu as plusieurs types d'exceptions à traiter, tu peux mettre
plusieurs catch(), à raison d'un par type, avec catch(...) en dernier :
try
{
// le code qui va générer des exceptions
}
catch (std::exception &e)
{
std:cout << "std::exception" << e.what() << std::endl;
}
catch(const char *str)
{
std::cout << "Caught exception: " << str << std::endl;
}
catch(unsigned n)
{
std::cout << "Caught exception: " << std::hex << n << std::endl;
}
catch(...)
{
std::cout << "Caught unknown exception" << std::endl;
}
--
___________ 2003-08-27 17:47:51
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
|
|
| Back to top |
|
 |
Vincent Richard Guest
|
Posted: Wed Aug 27, 2003 5:20 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Le Mercredi 27 Août 2003 19:22, Arnaud Debaene a écrit :
| Quote: | Frédéri MIAILLE wrote:
Car je suppose que la division par 0 doit générer une exception en
bonne et dûe forme.
Non, pas d'après la norme (c'est un UB), et je ne connais pas de
plate-forme qui permette directement de gérer les divisions par 0 sous
forme d'exceptions C++.
|
<HS>
Il y a quelque chose qui y ressemble assez (avec des mots-clés non
standards) sous Windows avec Visual C++ : voir mon précédent message
concernant le SEH (Structured Exception Handling).
</HS>
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Wed Aug 27, 2003 5:22 pm Post subject: Re: Recuperation de toutes les erreurs d'execution. |
|
|
Frédéri MIAILLE wrote:
| Quote: | Car je suppose que la division par 0 doit générer une exception en
bonne et dûe forme.
|
Non, pas d'après la norme (c'est un UB), et je ne connais pas de plate-forme
qui permette directement de gérer les divisions par 0 sous forme
d'exceptions C++.
Arnaud
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Wed Aug 27, 2003 8:40 pm Post subject: [HS] Re: Recuperation de toutes les erreurs d'execution. |
|
|
Vincent Richard wrote:
| Quote: | Le Mercredi 27 Août 2003 19:22, Arnaud Debaene a écrit :
HS
Il y a quelque chose qui y ressemble assez (avec des mots-clés non
standards) sous Windows avec Visual C++ : voir mon précédent message
concernant le SEH (Structured Exception Handling).
|
Oui, mais ce ne sont pas des exceptions C++ et n'ont pas exactement la même
sémantique. Voir aussi _set_se_translator pour les "fusionner" avec les
exceptions C++.
Arnaud
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|