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

Autres éditeurs Discussion :

[debug] comment récupérer la pile d'appel lors d'un crash ?


Sujet :

Autres éditeurs

  1. #1
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut [debug] comment récupérer la pile d'appel lors d'un crash ?
    Bonjour à tous,

    Je me demandais si en C/C++ il existe un moyen simple de logger les appels de fonctions successifs pour pouvoir débbuguer lors d'un crash.

    Utiliser un IDE avec débuggeur pour trouver l'endroit ou ca plante serait le top mais dans mon cas je peut pas. Il y a aussi la solution d'afficher des infos au long du code, mais voilà je me demandais s'il y avait pas un moyen plus simple ? avec ddd par exemple ?

    edit : précision importante je suis sous linux / gcc / makefile

    Merci d'avance de vos réponses

  2. #2
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    pour faire avancer les choses je suis tombé sur un truc qui s'appelle gprof qui permettrai de faire ca mais que j'ai pas encore testé

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Ca s'appelle un débogueur. Il faut que ton programme soit compilé avec des infos de debug, et le débogueur saura reconstituer la pile des appels en cas de crash.

  4. #4
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ok....
    et concrètement ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Ben le débogueur de gcc c'est gdb. ddd est un front-end graphique. Il faut apprendre à s'en servir...

  6. #6
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ok, merci pour la réponse très très utile...

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Je ne sais pas quoi te dire, à part de lire la doc et de se lancer
    http://www.google.fr/search?hl=fr&q=gdb+tutorial&meta=

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    apparement l'utilisation d'un outils externe (gdb) te convient, mais si quelqu'un connait une solution pour faire celà en C ou en C++, je me permet de faire un peu de pub pour un sujet similaire : [C++] Obtenir call stack d'un programme java/C++ ?

  9. #9
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    j'ai essayé avec ddd (l'interface de gdb), et la pile d'appel qu'il a sauvé n'est pas la bonne (et je peut dire ca après avoir retracé le programme avec des printf). la pile d'appel pointait le destructeur d'un membre qui n'était meme pas dans le contexte du crash

    mais surtout ce que je voulais savoir était plus général : a savoir si l'on peut logger les appels de fonctions (sous forme d'arbre si possible), pour avoir un apercu de tout ce qui s'est passé avant le crash (et si possible connaitre sans doute possible l'endroit exact du crash)

    voilà voilà

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Il n'y a pas de solution standard, il faut regarder les possibilités de ton compilo. Mais normalement la version debug doit fonctionner, et c'est plus performant et fiable, à condition de compiler en debug bien sûr, car si tu optimises, ta fonction peut avoir été inlinée etc...

  11. #11
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    j'utilise gcc qui semble avoir une option -fprofile-arcs mais j'ai aucune idée de quoi faire avec le fichier fourni. à la base j'ai utilisé cette fonction à l'aide de la doc gprof qui expliquait qu'il en avait besoin pour retracer les fonctions, mais il ne semble pas le reconnaitre

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    gprof c'est pour de l'optimisation guidée par profil d'exécution, c'est autre chose que ce que tu cherches.

  13. #13
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    ok c'est qu'il me semblait avoir vu au final
    je continue à lire le man de gcc alors mais je pense pas y trouver ce que je veut :/

  14. #14
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par mamelouk
    j'utilise gcc
    Pour le mode debug : -g
    Je conseille aussi d'ajouter -O0 pour éviter tout problème (au cours de mes tests je me suis aperçu que gcc m'avais inliner une fonction, difficile de récupérer son contexte sur la pile )

Discussions similaires

  1. Connaître la pile d'appels lors d'une exception
    Par MiJack dans le forum Langage
    Réponses: 9
    Dernier message: 19/11/2009, 10h59
  2. [Pile]Pourquoi devoir récupérer la donnée du sommet lors du dépilement
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 12/02/2008, 14h31
  3. Réponses: 2
    Dernier message: 16/03/2007, 16h26
  4. Réponses: 4
    Dernier message: 26/09/2006, 13h57
  5. Affichage de la pile d'appel lors d'une exception
    Par damien.yep dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2005, 16h42

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