C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Recuperation de toutes les erreurs d'execution.

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Ben
Guest





PostPosted: Wed Aug 27, 2003 9:47 am    Post subject: Recuperation de toutes les erreurs d'execution. Reply with 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.

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





PostPosted: Wed Aug 27, 2003 12:53 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote



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





PostPosted: Wed Aug 27, 2003 1:44 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote



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





PostPosted: Wed Aug 27, 2003 1:46 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 2:01 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 2:08 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with 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...
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





PostPosted: Wed Aug 27, 2003 2:14 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with 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.

"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





PostPosted: Wed Aug 27, 2003 2:51 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 3:19 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 3:56 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 5:20 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 5:22 pm    Post subject: Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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





PostPosted: Wed Aug 27, 2003 8:40 pm    Post subject: [HS] Re: Recuperation de toutes les erreurs d'execution. Reply with quote

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++.
Quote:
/HS

Arnaud



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.