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

  FORUM HardWare.fr
  Programmation
  C++

  Exceptions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exceptions

n°461819
hastur
Posté le 18-07-2003 à 17:10:50  profilanswer
 

Bonjour,
 
J'ai un bout de code entouré d'un try - catch.
 
Dans les catch j'intercepte toutes les exception dont je sais qu'elles peuvent etre lancé par mon bout de code.
 
Mon probleme est qu'aucune de ces exceptions n'est lancée donc j'ai du rater qque chose.
 
Mon dernier catch est un catch generique catch(...) {}
Dan ce type de catch, y a t'il moyen de recuperer la moindre info sur l'exception lancée ?
 
Merci

mood
Publicité
Posté le 18-07-2003 à 17:10:50  profilanswer
 

n°463059
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 09:36:46  profilanswer
 

Heu, si y a pas d'exception de lancé c'est à priori que tous c'est bien passé, enfin en général c comme ça  :whistle:


---------------
Le Tyran
n°463390
gatorette
Posté le 21-07-2003 à 14:25:58  profilanswer
 

Si je comprend bien ton programme, tu as fait un truc dans le genre :

Code :
  1. try
  2. {
  3. try
  4. {
  5. // partie de code pouvant déclencher une exception
  6. // de type "MonException" ou "MonException2"
  7. }
  8. catch( const MonException& e )
  9. {
  10. // traitement de l'exception
  11. }
  12. catch( const MonException2& e )
  13. {
  14. // traitement de l'exception
  15. }
  16. }
  17. catch(...)
  18. {
  19. // catch générique
  20. }


 
Or ton programme detecte aucune exception "MonException" ou "MonException2" mais par contre rentre dans le catch générique, c'est ça ?
 
Premièrement, je ne crois pas que tu puisse "normalement" récupérer des infos sur l'exception dans un catch générique. Par contre, l'exception doit tout de même se retrouver quelque part (sur la pile, dans un registre...), donc tu dois pouvoir la récupérer de cette façon (juste pour debugger évidemment). Par exemple, je sais qu'en cas d'exception non gérée, Visual C++ t'affiche une boîte de dialogue avec le type de l'exception ("Unhandled exception..." ).
Sinon, le mieux est encore de vérifier dans le code le type d'exception pouvant être générées et, si besoin, de le demander aux développeurs des bibliothèques que tu utilises.
 
-- Edit --
Correction apportée au code suite à la remarque de ++Taz


Message édité par gatorette le 21-07-2003 à 15:12:03

---------------
each day I don't die is cheating
n°463444
gatorette
Posté le 21-07-2003 à 15:12:27  profilanswer
 

Corrections faites...


---------------
each day I don't die is cheating
n°463453
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 15:22:39  profilanswer
 

++Taz a écrit :

personne vous a jamais appris qu'on capture toujours les exceptions par référence?


 
Et personne t'as apris à être aimmable?


---------------
Le Tyran
n°463457
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 15:28:10  profilanswer
 

++Taz a écrit :

ben à toi d'expliquer pourquoi il faut des références puis que mon intervention te plait pas


 
La remarque est judicieuse, c la forme qui laisse à désirer. [:spamafote]


---------------
Le Tyran
n°463469
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 15:36:20  profilanswer
 

++Taz a écrit :

et moi j'attends ton explication


 
Et moi je m'en cogne. Si t'as envie de donné plus de détail je t'en prie, je voulais juste te faire remarqué que tu pouvais utiliser un ton plus courtoi. Il est pas  nécessaire d'agrésser les gens même quand ils font un erreur.


---------------
Le Tyran
n°463485
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 15:47:15  profilanswer
 

++Taz a écrit :

donc en quelques sortes, 'on t'as jamais appris pourquoi il faut toujours capturer les exceptions par référence' CQFD


 
 :sarcastic:  
 
Et honétement: même si j'ai une vague idée du pkoi et du par ce que, je m'en cogne.


---------------
Le Tyran
n°463494
skeye
Posté le 21-07-2003 à 15:50:27  profilanswer
 

++Taz a écrit :

donc en quelques sortes, 'on t'as jamais appris pourquoi il faut toujours capturer les exceptions par référence' CQFD


Et t'as demontré quoi? Que tu savais plus de choses? Super, content pour toi...Ca te donne le droit d'être aussi désagréable? :sarcastic:

n°463506
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 15:56:11  profilanswer
 

++Taz a écrit :

vas y explique...  
 
edit: je comprends pas pourquoi tu t'en cognes?


Par ce que je vois pas en quoi ça fait avancer le chmilblick, ok c mieux de récupérer par reférence, vraissemblblement par ce que ça évite de surcharger la pile, de passer par les mécanisme de recopie pas forcément léger suivant les objets (encore qu'on va pas mettre des tones de truc dans une exception) et sans doute pour d'autres raisons auquelle j'ai pas pensé 1) par ce que j'ai autre chose à faire 2) ça ne revet pas un intéret fénoménal à mes yeux. Ouai super on est vachement contant maintenent.
 
Ca change pas que tu pourais être plus aimable avec les gens quand tu leur fait remarqué qu'ils ontcomis une erreur  [:spamafote]
 
Edit on peut rajouter aux considérations précédentes le fait que ça permet un transtipage eventuel de classes filles vers une même classe mère.


Message édité par LetoII le 21-07-2003 à 16:17:34

---------------
Le Tyran
mood
Publicité
Posté le 21-07-2003 à 15:56:11  profilanswer
 

n°463517
gatorette
Posté le 21-07-2003 à 16:00:08  profilanswer
 

Je ne suis pas sûr que ce débat apporte grand chose au sujet...
 
Pour répondre à ++Taz : Non, désolé, on ne m'a jamais appris qu'il fallait capturer les exceptions par référence. A vrai dire, on ne m'a jamais appris à utiliser les exceptions. Pourtant, je les utilise dans mes programmes et je les capture par const-référence dans mes programmes parce que ça fonctionne et que je "sens" que c'est mieux (pas de recopie de l'exception). Quand j'ai écris le code, je me suis posé la question de mettre le petit '&' qui te pose tant de problèmes mais, n'étant pas sûr de moi, j'ai choisi de ne pas le mettre (à tort). Je suis heureux d'apprendre que ce que je faisais par "instinct" était bien.


---------------
each day I don't die is cheating
n°463524
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 16:04:15  profilanswer
 

gatorette a écrit :

Je ne suis pas sûr que ce débat apporte grand chose au sujet...
 
Pour répondre à ++Taz : Non, désolé, on ne m'a jamais appris qu'il fallait capturer les exceptions par référence. A vrai dire, on ne m'a jamais appris à utiliser les exceptions. Pourtant, je les utilise dans mes programmes et je les capture par const-référence dans mes programmes parce que ça fonctionne et que je "sens" que c'est mieux (pas de recopie de l'exception). Quand j'ai écris le code, je me suis posé la question de mettre le petit '&' qui te pose tant de problèmes mais, n'étant pas sûr de moi, j'ai choisi de ne pas le mettre (à tort). Je suis heureux d'apprendre que ce que je faisais par "instinct" était bien.


 [:plusun]


---------------
Le Tyran
n°463579
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 16:29:30  profilanswer
 

++Taz a écrit :

ah ouais? ok, je vais vous expliquer pourquoi il est essentiel de capturer les exceptions par const référence.
 
1) pour le polymorphisme! rappelez vous que la grande majorité des exceptions sont basées tot ou tard sur une classe mère, le plus souvent au plus bas niveua sur std::exception. si vous capturez par valeur, vous risquez vraisemblablement de perdre de l'information, puis que par définition, quand on catch, on essaye de ramasser ce qu'on peut, on n'a aucune assurance sur ce qui arrive
 
2) pour empecher que l'exception génère elle meme une exception! pour cela, la plus part des fonctions membres des exceptions sont const et surtout marquer comme ne lançant pas d'exception. il faut suivre ce contrat qui est un gage de sécurité. le problème si on attrape par valeur, c'est que la copie d'un objet peut générer une exception, notemment si on est dans une situation de bad_alloc, tout peut arriver.
 
donc on doit capturer les exceptions par const référence pour des raisons d'efficacité et de sécurité. si on ne le fait pas, la gestion est bancale et posera problème tot ou tard. le 2eme point vous parait peut etre parano, pourtant il est tout aussi important que le premier.


 
Et on est vachement avancé avec ça  :wahoo:


---------------
Le Tyran
n°463590
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 16:33:50  profilanswer
 

++Taz a écrit :

ecoute, si ce topic ne t'interesse pas et que les exceptions tu t'en fous, autant pas venir.


 
Ben justement, je vois aps en quoi ton explication fait avancé le pb mais bon ça doit venir de moi, en même temps j'ai pas beaucoup dormi je dois plus avoir les yeux en face des trous.


---------------
Le Tyran
n°463603
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 16:43:50  profilanswer
 

++Taz a écrit :

je corrigeais gatorette et je justifie.
 
par contre mon vrai conseil: le catch(...) j'aime pas trop, on ramasse vraiment tout.


C un peu le but de la chose en même temps :D

++Taz a écrit :


si c'est un try au niveau fonctionnel sur le main, ça va, sinon, ça revient à faire l'autruche. ...


 
Je vois pas trop ou tu veux en venir, tu pourais développer un peu?


---------------
Le Tyran
n°463613
gatorette
Posté le 21-07-2003 à 16:48:43  profilanswer
 

++Taz a écrit :

1) pour le polymorphisme! rappelez vous que la grande majorité des exceptions sont basées tot ou tard sur une classe mère, le plus souvent au plus bas niveua sur std::exception. si vous capturez par valeur, vous risquez vraisemblablement de perdre de l'information, puis que par définition, quand on catch, on essaye de ramasser ce qu'on peut, on n'a aucune assurance sur ce qui arrive
 
2) pour empecher que l'exception génère elle meme une exception! pour cela, la plus part des fonctions membres des exceptions sont const et surtout marquer comme ne lançant pas d'exception. il faut suivre ce contrat qui est un gage de sécurité. le problème si on attrape par valeur, c'est que la copie d'un objet peut générer une exception, notemment si on est dans une situation de bad_alloc, tout peut arriver.
 
donc on doit capturer les exceptions par const référence pour des raisons d'efficacité et de sécurité. si on ne le fait pas, la gestion est bancale et posera problème tot ou tard. le 2eme point vous parait peut etre parano, pourtant il est tout aussi important que le premier.


 
 :jap:
Merci pour cette information qui aurait évité bien des discussions si elle était venue plus tôt.


---------------
each day I don't die is cheating
n°463615
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 16:51:54  profilanswer
 

++Taz a écrit :

ben au coeur de ton programme, ça te sert à quoi de catch(...) ?


 
En général à savoir qi y a une merde qq non prévu initialement et à agir en conséquence, par exemple sarréter le traitement, réessayer, envoyer un mail d'insulte chez le dévellopeur, gérer les erreurs quoi... En même temps je sent qu'on parle de la même chose sans arriver à se comprendre.


---------------
Le Tyran
n°463697
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 18:00:47  profilanswer
 

++Taz a écrit :

et tu m'expliques comment reprendre le traitement puisque finalement un catch(...) c'est attrapé une exception inattendue... le coup du mail d'insulte, c'est ce dont je te parler avec un try fonctionnel au niveau du main. tu rattrapes tout ce que qui est pas géré, joli message d'erreur et le programme se termine proprement...


 
Tout dépend du module où se produit l'exception, de la structure de l'appli peut y avoir moyen de ratrapper la chose pour ne pas en arriver à l'arrét pur et simple du prog.


---------------
Le Tyran
n°464147
LetoII
Le dormeur doit se réveiller
Posté le 21-07-2003 à 22:46:22  profilanswer
 

++Taz a écrit :

et tu fais quoi si tu ramasses un bad_alloc sans le savoir?


 
Heu là celle là vaut mieux la chopper effectivement :D
 
Mais bon je crois pas qu'on puisse réellement définir une politique général de gestion des erreurs, c typiquement un truc à régler au cas par cas selon l'appli dévellopée  [:spamafote]  
 
Bon et le code qui lance pas d'xception là, il arrive?  :whistle:


---------------
Le Tyran

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

  Exceptions

 

Sujets relatifs
Borland => problème avec exceptionsThreads et Exceptions
2 questions : gestion des exceptions et paramètres des fonctionscapture d'exceptions
gestion des exceptions dans les classes en cpples exceptions en c++
Gestion des exceptions dans les ServletsLes exceptions, y a une truc que j'comprend pas.
[Java] pb avec les ExceptionsGestion des exceptions dans des DLL
Plus de sujets relatifs à : Exceptions


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)