Exceptions - C++ - Programmation
Marsh Posté le 21-07-2003 à 09:36:46
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
Marsh Posté le 21-07-2003 à 14:25:58
Si je comprend bien ton programme, tu as fait un truc dans le genre :
Code :
|
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
Marsh Posté le 21-07-2003 à 15:12:27
Corrections faites...
Marsh Posté le 21-07-2003 à 15:22:39
++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?
Marsh Posté le 21-07-2003 à 15:28:10
++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.
Marsh Posté le 21-07-2003 à 15:36:20
++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.
Marsh Posté le 21-07-2003 à 15:47:15
++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 honétement: même si j'ai une vague idée du pkoi et du par ce que, je m'en cogne.
Marsh Posté le 21-07-2003 à 15:50:27
++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?
Marsh Posté le 21-07-2003 à 15:56:11
++Taz a écrit : vas y explique... |
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
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.
Marsh Posté le 21-07-2003 à 16:00:08
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.
Marsh Posté le 21-07-2003 à 16:04:15
gatorette a écrit : Je ne suis pas sûr que ce débat apporte grand chose au sujet... |
Marsh Posté le 21-07-2003 à 16:29:30
++Taz a écrit : ah ouais? ok, je vais vous expliquer pourquoi il est essentiel de capturer les exceptions par const référence. |
Et on est vachement avancé avec ça
Marsh Posté le 21-07-2003 à 16:33:50
++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.
Marsh Posté le 21-07-2003 à 16:43:50
++Taz a écrit : je corrigeais gatorette et je justifie. |
C un peu le but de la chose en même temps
++Taz a écrit : |
Je vois pas trop ou tu veux en venir, tu pourais développer un peu?
Marsh Posté le 21-07-2003 à 16:48:43
++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 |
Merci pour cette information qui aurait évité bien des discussions si elle était venue plus tôt.
Marsh Posté le 21-07-2003 à 16:51:54
++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.
Marsh Posté le 21-07-2003 à 18:00:47
++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.
Marsh Posté le 21-07-2003 à 22:46:22
++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
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
Bon et le code qui lance pas d'xception là, il arrive?
Marsh Posté le 18-07-2003 à 17:10:50
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