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

Windows Forms Discussion :

Problème Try/Catch en mode release. [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut Problème Try/Catch en mode release.
    Bonjour , je développe actuellement une application Windows Form dans laquelle j'utilise plusieurs bloque try catch.

    Cependant lorsque j'installe mon application (après l'avoir compilé en mode release) sur un autre PC , l'application plante des qu'elle rencontre une exception.

    Nom : truc.png
Affichages : 262
Taille : 57,6 Ko

    j'ai cru comprendre que le problème venait du fait que sur l'autre PC il n'y avait pas de debugeur.
    A savoir que sur ma machine l'application fonctionne sans problème.

    J'aimerai donc savoir comment résoudre ce problème.

    Merci d'avance.

    EDIT : j'ai mis le bon screen , désolé

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    ton appli plante "dès qu'elle tape une exception" ou toujours sur cette exception ?
    De mon point de vue il est quand même peu commun de catcher une out of range exception ... à moins que tu n'en sois l'émetteur ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    En faite j'ai plusieurs textbox dans lesquelles l'utilisateur insère des valeurs numériques.

    Le but étant par exemple :
    valeur du textbox1 * la valeur du textbox2 = valeur dans le textbox 3

    j'ai donc utilisé un bloque try catch de manière a ce que dans le cas ou la saisie d'un textbox et incorrecte ou null j'affiche un message box indiquant à l'utilisateur la nature du problème.

    Pour le moment il semblerait que l'application plante sur cette exeption.

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Ne serait-il pas plus propre de tester la validité des valeurs fournies plutôt que de mettre ton code dans un try/catch ? Y'a notamment les fonctions Int32.TryParse/Double.TryParse (selon le type recherché) qui permettent de faire ça sans passer par une gestion d'exception.

    Deux petites remarques supplémentaires :
    - ça ne répond pas à ta question d'exception levée uniquement sur un poste, je le conçois,
    - comment peux-tu avoir une out of range exception sur le cas que tu m'indiques ? J'ai du mal à voir.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Par défaut
    Au nez et à tout hasard, est ce que ton application attend un argument?

    ps: envoi le détail de l'exception

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    re-bonjour ,
    Donc j'ai retiré les try catch présent dans ma partie calcul et ajouté des conditions afin d'éviter les erreurs de saisie.

    Sur mon poste tout fonctionne sans problème mais une fois que j’exécute le logiciel sur l'autre pc le programme continue de planter.

    voice le rapport d'erreur :

    Consultez la fin de ce message pour plus de détails sur l'appel du débogage
    juste-à-temps (JIT) à la place de cette boîte de dialogue.

    ************** Texte de l'exception **************
    System.FormatException: Le format de la chaîne d'entrée est incorrect.
    à System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
    à AppliWinForm.Form2.tbPrixAch_Leave(Object sender, EventArgs e) dans C:\Users\Valentin\Desktop\Stage\Pyramide\AppliPyramide\Form2.cs:ligne 393
    à System.Windows.Forms.Control.OnLeave(EventArgs e)
    à System.Windows.Forms.Control.NotifyLeave()
    à System.Windows.Forms.ContainerControl.UpdateFocusedControl()


    ************** Assemblys chargés **************
    mscorlib
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    Pyramide
    Version de l'assembly*: 1.0.0.0
    Version Win32*: 1.0.0.0
    CodeBase*: file:///G:/Install/Release/Pyramide.exe
    ----------------------------------------
    System.Windows.Forms
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34251 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34285 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34238 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Data
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    System.Core
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Xml
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34283 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Configuration
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Windows.Forms.resources
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    MySql.Data
    Version de l'assembly*: 6.9.8.0
    Version Win32*: 6.9.8.0
    CodeBase*: file:///G:/Install/Release/MySql.Data.DLL
    ----------------------------------------
    System.Transactions
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
    ----------------------------------------
    System.Numerics
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    System.EnterpriseServices
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
    ----------------------------------------
    System.Management
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Management/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Management.dll
    ----------------------------------------
    mscorlib.resources
    Version de l'assembly*: 4.0.0.0
    Version Win32*: 4.0.30319.34209 built by: FX452RTMGDR
    CodeBase*: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_fr_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------

    ************** Débogage JIT **************
    Pour activer le débogage juste-à-temps (JIT), le fichier de configuration pour cette
    application ou cet ordinateur (machine.config) doit avoir la valeur
    jitDebugging définie dans la section system.windows.forms.
    L'application doit également être compilée avec le débogage
    activé.

    Par exemple*:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Lorsque le débogage juste-à-temps est activé, les exceptions non gérées
    seront envoyées au débogueur JIT inscrit sur l'ordinateur
    plutôt que d'être gérées par cette boîte de dialogue.

    Ainsi qu'un screen :

    Nom : truc.png
Affichages : 293
Taille : 57,6 Ko


    EDIT :

    - comment peux-tu avoir une out of range exception sur le cas que tu m'indiques ? J'ai du mal à voir.
    Je me suis trompé de screen il ne s'agit pas d'une out of range mais d'un format d'entrée incorrecte.

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ton bloc try/catch ne doit pas être positionné sur cette exception ou tu n’attrape pas la bonne exception.
    Qu'y à il à la ligne 197 dans calcArticle et ligne 398 dans tbPrixAch_Leave ?
    L'exception se produit lorsque le contrôle perd le focus ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    Citation Envoyé par myNameIsFlo Voir le message
    Au nez et à tout hasard, est ce que ton application attend un argument?

    ps: envoi le détail de l'exception
    La methode que j'utilise pour les calculs attendait bien un argument , il ne mettait finalement d'aucune utilité du coup je l'ai supprimé.
    Cela a supprimé une des erreurs présentes dans le rapport.

    Du plus je constate dans le rapport cette erreur :
    à AppliWinForm.Form2.tbPrixAch_Leave(Object sender, EventArgs e) dans C:\Users\Valentin\Desktop\Stage\Pyramide\AppliPyramide\Form2.cs:ligne 393
    cette ligne correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     calc[0] = float.Parse(tbPrixAch.Text) * float.Parse(tbCoefCharge.Text);
    est-ce que remplacer les float.Parse en float.TryParse pourrait être une solution ?


    EDIT :

    Citation Envoyé par ericlm128 Voir le message
    Ton bloc try/catch ne doit pas être positionné sur cette exception ou tu n’attrape pas la bonne exception.
    Qu'y à il à la ligne 197 dans calcArticle et ligne 398 dans tbPrixAch_Leave ?
    L'exception se produit lorsque le contrôle perd le focus ?
    Bonjour ericlm128; Tu as répondue entre 2 modifications , donc l'erreur lié à la ligne 197 est résolue (c'était l'appel a la méthode calcArticle avec un argument inutile)

  9. #9
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Cette exception vient de tes dernières modif', c'est plus la même (on retombera donc dessus après).
    Comment fais-tu tes tests de parsing ?

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Cette exception vient de tes dernières modif', c'est plus la même (on retombera donc dessus après).
    J'avais pas mis le bon screen dans mon premier message , le problème a toujours été lié au format d'entré incorrecte.
    J'ai mis le bon screen , désolé

  11. #11
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    D'acc, alors le float.Parse peut lever une exception si tu lui files une valeur pourrie,
    c'est pour ça que je parlais de Double.TryParse, ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string tst = "3,14159";
    double real;
    if (Double.TryParse(tst, out real) == false) {
    	MessageBox.Show("la valeur saisie l'est toute pourriTe");
    }

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    Bonjour ,
    J'ai donc remplacé les float.Parse(...) par des double.tryParse(...).
    Du coup l'application ne plante plus sur l'autre machine.

    Cependant les calculs ne s'effectuent pas sur l'autre machine (sur la mienne pas de soucis)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      if (Double.TryParse(tbPrixRev.Text, out rslt[2]) == false)
                {
                    MessageBox.Show("err");
                }
     
                if (Double.TryParse(tbCoefBenef.Text, out rslt[3]) == false)
                {
                    MessageBox.Show("err");
                }
                calc[1] = rslt[2] * rslt[3];
     
                //   calc[1] = float.Parse(tbPrixRev.Text) * float.Parse(tbCoefBenef.Text);
                tbPrixBase.Text = calc[1].ToString();
    A chaque fois les 'try' ne fonctionnent pas et le messagebox pop

  13. #13
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Tu as quoi comme valeur dans tes TextBoxes ? (affiche les dans ta MessageBox d'erreur pour voir).

    NB : si la valeur est une chaîne vide ou null (deuxième cas impossible pour un TextBox.Text) alors TryParse sortira en erreur.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    re ,

    Il semblerait que le problème vienne des nombres a virgule (1,000).
    L'application fonctionne correctement avec les entiers.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    Ok donc ,
    sur mon pc le séparateur décimal c'est une virgule (,) sur l'autre pc c'est un point (.)
    Y a t'il un moyen de s'adapter au séparateur décimal par défaut ?

  16. #16
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Chose bizarre, perso quand je file à TryParse un nombre avec le mauvais séparateur décimal il fait comme si y'en avait pas (ex. "1,23" -> 123), la fonction ne sort pas en erreur pour autant ...

    Quoiqu'il en soit il existe une autre forme de TryParse qui prend un IFormatProvider en param, ce qui permet de coller à une "culture" spécifique, ex. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string tst = "1,23";
    double real;
     
    if (!Double.TryParse(tst, NumberStyles.Float, new CultureInfo("fr-FR"), out real)) {
    	MessageBox.Show("la valeur saisie n'est pas valide");
    } else MessageBox.Show(real.ToString());

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 18
    Par défaut
    Ça fonctionne !
    Merci beaucoup de m'avoir consacré un peu de votre temps


  18. #18
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Par défaut
    Enfin, on peut consulter le séparateur dans les paramétrages régionales du poste ou bien, on force celui a la volée... ou encore, mettre le séparateur en paramétrage car c'est un problème courant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PC/SC : problème avec Qt en mode release
    Par arzela dans le forum Qt
    Réponses: 1
    Dernier message: 29/11/2011, 11h01
  2. Problème de mutex en mode release
    Par fredppp dans le forum C++/CLI
    Réponses: 3
    Dernier message: 05/11/2010, 20h26
  3. Exception non catché en mode release
    Par Troopers dans le forum C#
    Réponses: 3
    Dernier message: 06/07/2010, 10h09
  4. Problème try-catch dans mon code
    Par little pepito dans le forum Langage
    Réponses: 7
    Dernier message: 11/06/2007, 12h22

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