Accueil > Forum > > > > Try/Catch
Try/Catch
jeudi 24 juin 2010 à 19:12:35 |
Try/Catch

Jojo73450
|
Salut à tous !
Un problème tout bête mais j'ai passé la journée dessus (argg!!!!) alors je me décide à poster, ne trouvant aucune réponse...
Application MFC, mon application enregistre un fichier à partir d'informations contenues dans une base MySql. Voilà très grossièrement le schéma mis en place :
try
{
//Ouverture
CStdioFile file;
file open(monfichier.txt);
Boucle:
{
//Requete SQL qui récupère des informations
//Enregistrement des informations
file.WriteString(string_infos);
file.Flush();
}
file.Close();
}
catch(...)
{
//traitement de l'exception : affichage de l'erreur
}
Le fichier est en fait écrit sur une clé USB. La problématique est : "comment ne pas faire planter l'appli si on arrache la clé USB pendant l'export des informations ?"
J'ai mis en place le try/catch afin de récupérer toutes les exceptions, mais au lieu de ca mon appli crash si j'arrache la clé USB. L'appli ne rentre pas du tout dans le catch.
Une idée ?
D'avance merci à tous pour vos retours d'expérience !
Joël
|
|
jeudi 24 juin 2010 à 23:52:11 |
Re : Try/Catch

CptPingu
|
Une exception ne sert pas à attraper une routine qui plante !
Un try catch n'est que pour attraper une exception levée volontairement.
Si tu veux attaper un plantage (communément appelé "segfault"), il te faut détecter le signal d'un segfault.
Sous Linux, c'est très simple à faire, grâce à la méthode sigaction de signal.h
Sous Windows, je ne sais pas, mais tu peux faire quelque recherche sur l'équivalent de sigaction sous Windows.
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
|
|
vendredi 25 juin 2010 à 09:41:43 |
Re : Try/Catch

louis14
|
Bonjour,
Si tu as une solution, je suis preneur aussi
louis
|
|
vendredi 25 juin 2010 à 10:07:34 |
Re : Try/Catch

CptPingu
|
Il me semble que signal est aussi sous Windows.
Donc voici un petit exemple, à tester.
On pose un handler, et en cas de plantage, on revient au moment ou on a posé une "protection".
Je tiens tout de même à souligner le fait que c'est une très très mauvaise pratique, et qu'il vaut mieux investiguer sur l'origine de l'erreur plutôt que de la contourner !
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <setjmp.h>
static jmp_buf jump;
void handler()
{
printf("Segmentation fault catched !\n");
longjmp(jump, 1);
}
int main(void)
{
printf("Program begin\n");
signal(SIGSEGV, handler);
if (!setjmp(jump) )
{
char* p = NULL;
strcpy(p,"SEGFAULT, p is not allocated");
printf("%s", p);
}
printf("Program is here\n");
return 0;
}
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
|
|
vendredi 25 juin 2010 à 23:26:54 |
Re : Try/Catch

Jojo73450
|
Salut
Ben l'erreur est "connue" : la clé USB est arraché pendant la phase d'écriture, donc quand je fais mon WriteString et le Flush, une CFileException est levée.
Le reste du code est clean, ça marche impec. Mis à part cette histoire d'arrachage de clé....
Le problème serait donc de savoir comment récupérer systématiquement l'exception et que Windows ne termine pas l'application.
Intéressant ton exemple CptPingu, a essayer.
Joël
Ps: je précise que je l'appli tourne sur XP Embedded.
|
|
samedi 26 juin 2010 à 11:02:30 |
Re : Try/Catch

CptPingu
|
Dans ce cas, si une exception est levée, ça m'étonne que tu ne l'ai pas attraper avec un try catch all, du genre:
Code C/C++ :
try
{
//...
}
catch(...)
{
}
Passe le sous un debugger, pour vérifier ce qui arrête ton programme.
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
|
|
samedi 26 juin 2010 à 11:33:14 |
Re : Try/Catch

Jojo73450
|
Salut
Un mauvais signe (pour moi !) : une ancienne version du soft qui marchait très bien (y compris le coup de l'arrachage de la clé) ne marche plus. Après comparaison des codes sources, on avait bien aussi le try/catch(...), la seule différence se situe au niveau du traitement SQL (moins de data avec la version précédente du soft, donc moins de code dans le try{}).
Donc le coup du try/catch(...) marchait mais ne marche plus. Y aurait une config à faire au niveau de Windows pour récupérer toutes les exceptions ? (Base de registre ?)
Joël
|
|
lundi 28 juin 2010 à 11:20:37 |
Re : Try/Catch

CptPingu
|
Y aurait une config à faire au niveau de Windows pour récupérer toutes les exceptions ? (Base de registre ?)
Le "try ... catch" est un mécanisme du C++ et n'a absolument rien à voir avec l'OS.
En revanche, il est important de savoir pourquoi ton programme plante. Essaie de passer ton programme dans un débugger pour trouver l'origine du problème. (gdb, le debugger de visual, gdb embarqué dans QTCreator, ...)
Si ton programme est multi-plateforme (je suis sous Linux), je peux aussi jeter un coup d'oeil.
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
|
|
lundi 28 juin 2010 à 17:14:13 |
Re : Try/Catch

Jojo73450
|
Salut CptPingu !
Merci de ton aide, mais c'est au final résolu. J'ai fais un peu de ménage dans le code, et déplacé le try/catch(...). Je ne vois pas la différence entre avant et après si ce n'est qu'il y a au final moins de code dans le try{}... (pas beaucoup moins).
En pensant configuration, je ne pensait pas au mécanisme du try/catch lui même, mais à la levée des exceptions, qui, sauf erreur, sont faites par l'OS. Si l'OS ne remonte pas une exception et termine l'application sans se poser de question, try/catch ou pas try/catch, le programme "plante". Non ?
Encore merci pour ton aide !
Joël
PS: Louis, si tu es toujours, là, essaie de déplacer ton try/catch(...) 
|
|
Cette discussion est classée dans : file, try, informations, catch, clé
Répondre à ce message
Sujets en rapport avec ce message
try catch [ par raphael59540 ]
<img src="/imgs2/smile_question.gif"
Gestion des execptions et GCC [ par skirby ]
Bonjour,J'aurais voulu savoir si il était possible de gérer les execptions grace à l'instruction Try / Catch avec le compilateur GCC ?Plus précisément
afficher le contenu d'une 'exception en c++ [ par wislam2007 ]
Salut j'ai un try catch que je doit gérer : [code=cpp]try{ }catch(exception e){ // je veux afficher le contenu de l'exception : je fait e.what() mais
Trois erreurs: TypeNameExpected ; Catch statement missing ) ; Compound statement missing }. [ par ProgVal ]
void __fastcall TForm1::Button1Click(TObject *Sender){ try { String nf; nf="C:\Documents and Settings\raymond\Menu Démarrer\Progra
identification d'un driver [ par je_ne_viens_qu1_fois ]
Rebonjour et excusez moi d'avance si je parais "polluer" le forum.Mon problème est le suivant: je dois lire dans un périphérique USB.J'utilise la fonc
problème lors de compilation [ par fabrice91 ]
Bonjour,J'ai un programme avec des declarations telles que :#include #include et le compilateur me met des erreurs du style: fatal error C1083 : Canno
probleme fopen, fpuc, fgetc [ par ZEROCOOL492 ]
salut tout le mondevoila j'ai un probleme avec ce code :file = fopen(file_location, "r+b")input = fgetc(file);fputc(output, file);jai volontairement t
demande de clée d'activation sur mon prog [ par jipe32 ]
Salut à tous, comment faire pour que l'utilisateur puisse activer mon prog seulement si il possède une clé d'activation. Par exemple, il télécharge mo
Impression en MFC [ par ketchupy45 ]
Bonjour, je programme sous visual studio .net 2003 et j'utilise les MFC.Dans le cadre de cette source http://www.cppfrance.com/code.aspx?ID=35554Je vo
Problème d'insértion de la clé dans un arbre binaire de recherche récursivement [ par polobou ]
[b]BONJOUR[/b][^^happy8] Comment insérer la clé dans un arbre binaires de recherche récursivement sans utiliser par exemple un tableau [b]Merci[/b][
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|