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 :

VS2008 - erreur non interceptée


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut VS2008 - erreur non interceptée
    Bonjour,

    Quand mon code exécute une erreur, au lieu de s'arreter en mode débogage sur la ligne fautive, il m'indique dans la fenêtre d'exécution le message
    Une exception de première chance de type 'System.NullReferenceException' (par exemple) s'est produite dans Programme.exe
    puis me rend la main et ignore tout simplement le code qui suit la ligne de l'erreur.

    Comment faire pour que le debbuger s'arrete sur la ligne fautive ?
    -Je suis sous visual studio 2008
    -Il n'y a pas de gestionnaire d'exception sur l'erreur

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Par défaut, si l'erreur est interceptée (soit par ton code, soit par du code du framework qui appelle ton code), le debugger ne s'arrête pas. Pour t'arrêter dès qu'une exception est levée tu peux faire ça :

    Menu Déboguer -> Exceptions -> Cocher la colonne "Levé" sur la ligne "Common Language Runtime Exceptions"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Pour t'arrêter dès qu'une exception est levée tu peux faire ça :

    Menu Déboguer -> Exceptions -> Cocher la colonne "Levé" sur la ligne "Common Language Runtime Exceptions"
    Oui mais dans ce cas là il s’arrêtera même si j'ai interceptée l'erreur dans un Try/Catch, ce qui ne me convient évidemment pas.

    Ce qui m'étonne, c'est que en recherchant sur ce sujet,
    j'ai vu que plusieurs personnes avaient été confrontées à ce problème, mais sans aucune solution satisfaisante.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par azur668 Voir le message
    Oui mais dans ce cas là il s’arrêtera même si j'ai interceptée l'erreur dans un Try/Catch, ce qui ne me convient évidemment pas.
    Mais si le debugger ne s'arrête pas, c'est justement parce que l'exception est interceptée... mais peut-être pas dans ton code. Par exemple il me semble que les exceptions dans l'évènement Load en Windows Forms sont interceptées par le code qui déclenche l'évènement, donc le code du framework

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    MSDN Doc cite comme cause frequente de ce message ceci:
    Une NullReferenceException se produit lorsque vous tentez de référencer un objet dans votre code qui n'existe pas.
    Absence de New pour un objet afin d'encrer une instance.
    Recommendation Msdn:
    Interceptez explicitement NullReferenceException dans une instruction Try…Catch…Finally
    Un truc genant je l'avoue parce qu'ils ne disent pas ou il faut l'inserer Compte-tenu de la foultitude d'objets qu'on peut manipuler dans un programme,si on devait l'inserer à chaque initilialisation d'instance .....
    bonne soiree...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour
    MSDN Doc cite comme cause frequente de ce message ceci:
    Une NullReferenceException se produit lorsque vous tentez de référencer un objet dans votre code qui n'existe pas.
    Absence de New pour un objet afin d'encrer une instance.
    Recommendation Msdn:
    Interceptez explicitement NullReferenceException dans une instruction Try…Catch…Finally
    Un truc genant je l'avoue parce qu'ils ne disent pas ou il faut l'inserer Compte-tenu de la foultitude d'objets qu'on peut manipuler dans un programme,si on devait l'inserer à chaque initilialisation d'instance .....
    bonne soiree...
    As-tu lu la question ? Il ne demande pas comment résoudre une NullReferenceException, mais pourquoi le debugger ne s'arrête pas dessus...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par tomlev Voir le message
    As-tu lu la question ? Il ne demande pas comment résoudre une NullReferenceException, mais pourquoi le debugger ne s'arrête pas dessus...
    En fait, j'ai aussi ce problème, mais je n'en avait pas parlé, pour mieux cerner le problème principal, qui est que :
    1) parfois quand survient une erreur, le debugger 'saute' tout le code restant à exécuter et indique dans la fenêtre d'exécution qu'il y a eu une erreur (sans indiquer où !!!!).
    mais comme il n’interrompt pas le code, on risque de ne pas se rendre compte qu'il y eu une erreur et que du code a été ignoré.
    De plus quand on s'en rend compte, on a bien du mal a retrouver cette erreur à eu lieu.

    2) Mais il est vrai que j'ai aussi l'autre problème qui ressemble à ce que mentionne MABROUKI,
    qui est que parfois il m'indique dans la fênetre d'exécution des messages 'Une exception de première chance de type...' alors que tout mon code s'est correctement exécuté.
    Il s'agit souvent de NullReferenceException mais pas seulement.
    En traçant l'exécution, ces messages apparaissent après que la dernière ligne de mon code a été appelé.

    Le problème est que ces messages compliquent la tache,
    car je ne sait pas s'il viennent du problème décrit en 1) et que une partie de mon code a été ignoré,
    ou s'ils proviennent du problème décrit en 2) que je ne m'explique pas mais ne correspondent en tout cas pas à une anomalie dans mon code.

    Citation Envoyé par tomlev Voir le message
    il me semble que les exceptions dans l'évènement Load en Windows Forms sont interceptées par le code qui déclenche l'évènement, donc le code du framework
    Très embettant ça...
    Cela empêche la propagation de l'erreur.
    Ce fonctionnement n'est documenté nulle part ?
    Y a t il un liste exhaustive des contextes dans lesquel le Framework intercepte les erreurs même si je ne les ai pas intercepté dans mon code ?

    Merci a vous tous

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par azur668 Voir le message
    Ce fonctionnement n'est documenté nulle part ?
    Y a t il un liste exhaustive des contextes dans lesquel le Framework intercepte les erreurs même si je ne les ai pas intercepté dans mon code ?
    Pas à ma connaissance

    Tout ce que tu peux faire, c'est cocher l'option que je t'ai dit, ou utiliser des try/catch

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par tomlev Voir le message
    , ou utiliser des try/catch
    encore faudrait-il savoir où les mettre, ces Try/Catch, vu qu'il ne m'indique pas quelle ligne est à l'origine de l'erreur...

    Merci bien pour tous ces renseignements.

    En espérant qu'un jour, un contributeur éclairé viendra poster ici une solution ...

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    encore faudrait-il savoir où les mettre, ces Try/Catch, vu qu'il ne m'indique pas quelle ligne est à l'origine de l'erreur...
    On peut récupérer la stack dans le catch (propriété StackTrace de l'exception).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Graffito Voir le message
    On peut récupérer la stack dans le catch (propriété StackTrace de l'exception).
    oui, quand j’aurai su où mettre le catch...
    Il ne m'indique même pas dans quelle procedure ni même dans quelle classe le problème est survenu !

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/02/2012, 10h31
  2. Réponses: 3
    Dernier message: 04/02/2010, 15h37
  3. [FORMS][6i] Erreur non explicitée
    Par badara1 dans le forum Forms
    Réponses: 15
    Dernier message: 13/05/2005, 10h56
  4. [ADO-Access] ADOQuery1.Open (SELECT) -> Erreur non spécif
    Par david_chardonnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/11/2004, 15h29

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