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

Dev-C++ Discussion :

Segfault .. pas d'exception ?


Sujet :

Dev-C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut Segfault .. pas d'exception ?
    Salut, j'ai un petit souci dans mon programme qui est le suivant :
    J'ai un crash à l'exécution (à mon avis de type segfault ) qui est en plus de cela aléatoire (pas à chaque exécution donc à mon avis c'est une histoire d'initialisation ou quelque chose dans le genre ) mon objectif est donc de repérer l'endroit de l'erreur.

    Ma question est donc simple : le segfault déclenche-t-il une exception ? si oui laquelle ? (runtime_error ?) sinon comment faire pour repérer mon erreur (sans logger toutes les opérations sinon je me tire une balle j'en ai pour des années !!!)

    Voila @++
    Seb

  2. #2
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    utilise un debugger ça sera plus simple si tu veux pas faire des sorties dans un fichier log

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    OK je voudrais bien utiliser le débugger mais ca fait 25 fois qu'il me dit qu'il faut recompiler le projet avec les infos de débuggage et que au finale je peut pas le lancer mon débugage .... ^o) (jsui sous DEVCpp)

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Sous un système unixoïde: Aucune idée, mais tu peux toujours essayer la solution de lancer une exception dans le traitement du signal...

    Sous Windows: Une Access Violation (l'équivalent d'une segfault) est une exception Win32, pas une exception C++. Toutefois, les bibliothèques run-time Microsoft proposent des fonctions pour convertir automatiquement toute exception Win32 en exception C++.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    Bon effectivement aparemment il existe une solution pour récupérer les exceptions windows mais elle utilise _set_se_translator(); contenue dans la bibliotheque runtime de windows qui se trouve aparemment sur VisualC++

    Comment l'utiliser avec DEVC++ ???
    Merci d'avance
    Seb

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par Médinoc
    Sous un système unixoïde: Aucune idée, mais tu peux toujours essayer la solution de lancer une exception dans le traitement du signal...

    La lancée d'exception dans un gestionnaire de signal est un comportement indéterminée (et en tout cas, la seule fois que j'ai essayé, c'était sous mingw sous windows, et ça marchait pas, je ne sais pas si ça marche sur une autre architecture/compilateur/OS).

    on effectivement aparemment il existe une solution pour récupérer les exceptions windows mais elle utilise _set_se_translator();
    La fonction signal marche également Au passage, Segmentation fault est une interruption (ou signal) (SIGSEGV) lancée par la MMU (qui indique un accès illégal à la mémoire).
    Cela n'a aucun rapport avec les exceptions du C++ (lancée par throw)

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Citation Envoyé par millie
    Au passage, Segmentation fault est une interruption (ou signal) (SIGSEGV) lancée par la MMU (qui indique un accès illégal à la mémoire).
    Cela n'a aucun rapport avec les exceptions du C++ (lancée par throw)
    C'est bien ce que j'ai dit: Sous Win32, ça se traduit par une exception Windows (EXCEPTION_ACCESS_VIOLATION), récupérable avec du Structured Exception Handling (SEH), par opposition aux exceptions C++ que l'on récupère avec des try/catch.

    Sous Win32, je suppose que l'exception Win32 arrive en premier, et que si elle n'est pas traitée, elle débouche sur un signal SIGSEGV (ou sur une exception C++ si _set_se_translator() a été appelée).
    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.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc
    Sous un système unixoïde: Aucune idée, mais tu peux toujours essayer la solution de lancer une exception dans le traitement du signal...
    .
    sous système unixoide, tout bon debugger fait ça (enfin on n'a pas besoin de le faire, il se charge de capter et même d'amener sur la ligne en cause et de fournir la pile d'appel..)

    ddd par exemple...

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Mais là, le programme lui-même ne le sait pas.
    Ce qu'on cherche ici, c'est à obtenir une exception C++ au lieu d'un signal SIGSEGV. Et ça, je ne vois pas comment un debugger peut y faire grand-chose...
    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.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Il y avait eu cette discussion ci il y a peu de temps :

    http://www.developpez.net/forums/sho...d.php?t=349829

    (edit, devC++ dispose de gdb qui marche très bien pour repérer les erreurs de segmentation. Attention, il faut spécifier l'option -g lors de la compilation)

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Parlons-en, de Dev-C++ : Il n'utilise pas GDB pour déboguer ses propres erreurs de segmentation quand il a un problème avec l'autocomplete : Il est probable qu'il utilise du SEH...
    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.

Discussions similaires

  1. [EF][C#] Pas d'exception sur ouverture de base
    Par ClaudeBg dans le forum Accès aux données
    Réponses: 5
    Dernier message: 20/01/2009, 17h55
  2. [EF][C#] Pas d'exception sur ouverture de base
    Par ClaudeBg dans le forum Linq
    Réponses: 5
    Dernier message: 20/01/2009, 17h55
  3. Je ne comprends pas l'exception
    Par fafoula dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 15/12/2007, 17h24
  4. Application console DotNet 2.0 bloqué, pas d'exception levée
    Par Ozanges dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/11/2007, 11h15
  5. Ne comprends pas une exception SQL
    Par n@n¤u dans le forum Outils
    Réponses: 3
    Dernier message: 13/07/2006, 13h04

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