IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

R�cup�ration des erreurs d'une appli console win32


Sujet :

Visual C++

  1. #1
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut R�cup�ration des erreurs d'une appli console win32
    Salut � tous

    Je travaille sur un grosse application console win32 qui de temps en temps plante pour des raisons non encore d�finie. J'aimerais savoir s'il est possible de r�cup�rer les erreur quelque part. Ceci afin d'informer l'utilisateur que �a a plant� et �ventuellement savoir pourquoi.

    Pour test j'ai �crit ce tout petit bout de code qui provoque une erreur.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	printf_s("Cette application plante et c'est normal");
    	double x = 3.1416e-3;
    	double y = 5;
    	double *p=NULL;//permet de générer une erreur
     
    	for (int n = 0; n < 10; n++)
    	{
    		*p= x / y;		
    		y -= 1;
    	}
    	return 0;
    }
    • Quand je le lance sous visual studio il me met un message comme quoi j'ai un pointeur null.
    • Si je le lance dans une fen�tre invite de commande. Je n'ai pas de retour. Windows me g�n�re juste une fen�tre qui indique que mon application � planter et que windows recherche une solution.
    • Si je fais ex�cuter cette application via une application en java (mode de fonctionnement normal pour l'application r�elle) je n'ai aucun retour.

    Quelqu'un aurait il une id�e?

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu dois pouvoir faire �a avec du Structured Exception Handling, en mettant un log dans ton Exception Filter:
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    int MyExceptionFilter(DWORD exceptionCode, LPEXCEPTION_POINTERS exceptionPointers)
    {
    	fprintf(stderr, "SEH exception of type %08lX! Terminating.\n", exceptionCode);
    	FILE * logFile = fopen("logfile.txt", "a");
    	if(logFile != NULL)
    	{
    		fprintf(logFile, "SEH exception of type %08lX! Terminating.\n", exceptionCode);
    		switch(exceptionCode)
    		{
    		case EXCEPTION_ACCESS_VIOLATION:
    			/*Logguer les infos supplémentaires dans exceptionPointers*/
    			break;
    		}
    		fclose(logFile);
    	}
    	return EXCEPTION_CONTINUE_SEARCH;
    }
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	__try
    	{
    		printf_s("Cette application plante et c'est normal");
    		double x = 3.1416e-3;
    		double y = 5;
    		double *p=NULL;//permet de générer une erreur
     
    		for (int n = 0; n < 10; n++)
    		{
    			*p= x / y;		
    			y -= 1;
    		}
    		return 0;
    	}
    	__except(MyExceptionFilter(GetExceptionCode(), GetExceptionInformation())
    	{
    		return GetExceptionCode(); /*Ne sera pas exécuté de toute façon*/
    	}
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut
    Bonne id�e mais je crains de ne pas pouvoir l'appliquer dans ma grosse application car il faudrait que je mette des __try/ __except un peu partout.
    Sinon j'ai pens� � un syst�me du type chien de garde.

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Note que le code que j'ai post� ne permet pas de "r�cup�rer" l'erreur, mais d'informer l'utilisateur quand le programme plante.
    Il ne convient pas de consid�rer une Access Violation comme une erreur "r�cup�rable" si on ne l'a pas provoqu�e sciemment dans des conditions contr�l�es.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    L�, je vais encore faire mon ayatollah, d�sol� M�dinoc.

    On ne catch pas une exception qu'on ne traite pas (logguer n'est pas traite).

    Votre application console n'est pas l'application frontale de l'utilisateur, �a serait mal venu qu'elle affiche des messages d'erreurs hors du contexte d'utilisation de l'utilisateur final. En bref, c'est plus � l'application JAVA de se d�merder pour expliquer � son utilisateur que votre application console est partie en sucette (et elle peut avoir des roues de secours, elle).

    L'approche que je vous conseille et que vous semblez envisager, c'est celle des WatchDog.

    Pour avoir un syst�me sympa, je vous conseillerai d'utiliser des outils comme ADPlus qui permettent d'automatiser la configuration et la g�n�ration de fichier de dump en cas de crash d'une application.

    L'application JAVA lance le WatchDog et communique avec celui-ci.
    Le WatchDog lance votre application console en ayant configur� DrWatson / ADPlus pour avoir un dump en cas de crash.
    Le WatchDog peut relancer l'application console ou r�pondre � l'application JAVA avec le code d'erreur qui va bien.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    EXCEPTION_CONTINUE_SEARCH signifie que je ne la catche pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Votre application console n'est pas l'application frontale de l'utilisateur, �a serait mal venu qu'elle affiche des messages d'erreurs hors du contexte d'utilisation de l'utilisateur final. En bref, c'est plus � l'application JAVA de se d�merder pour expliquer � son utilisateur que votre application console est partie en sucette (et elle peut avoir des roues de secours, elle).
    Oui c'est tout � fait �a. L'application console r�alise des calculs qui peuvent �tre tr�s long et ce qui pose probl�me � l'utilisateur c'est que parfois dans le cas ou l'application plante il ne le sait pas. Normalement il y a un suivit de la progression des calculs mais il peut �tre lent. Si je ne r�cup�re pas l'erreur ce n'est pas vraiment un probl�me. Il faut juste que je mette un message "L'application a plant� inutile d'attendre".

    Je vais jeter un oeil � ADPlus

  8. #8
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    J'avais parl� de DrWatson et d'ADPlus pour g�n�rer des dump et donc faire de l'analyse de bugs "sur terrain".

    Si le probl�me est plus de l'ordre du feedback � l'application JAVA, j'ai du mal � comprendre pourquoi la valeur de retour de l'ex�cution du process ne suffit pas ?

    Le watchdog, c'est plus pour relancer automatiquement le processus qui � plant�.

  9. #9
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut
    Effectivement je n'avais pas pens� au retour d�ex�cution. Je pensais pouvoir avoir un message du type de celui que donne le debbuger. Certain module de cette application sont en Fortran et il retourne des messages d'erreur mais pas les parties en C++

Discussions similaires

  1. VB6: R�cup�ration des meta d'une page HTML avec HTMLDocument
    Par Matounet dans le forum VB 6 et ant�rieur
    R�ponses: 10
    Dernier message: 22/09/2011, 07h55
  2. R�cup�ration des param�tres d'une requ�te
    Par TomPad dans le forum Access
    R�ponses: 10
    Dernier message: 16/06/2005, 15h11
  3. R�ponses: 4
    Dernier message: 05/05/2005, 16h34
  4. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 02/08/2004, 11h20
  5. R�cup�ration des param�tres avec une procedure stock�e
    Par samlerouge dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 31/03/2004, 22h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo