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

 C++ Discussion :

Trouver la méthode appelante


Sujet :

C++

  1. #1
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut Trouver la méthode appelante
    Bonjour,

    voilà, en temps normal je développe en java, donc je suis un peut perdu en c++, mon problème : j'ai une méthode X, dans cette méthode je voudrais savoir comment récupérer le nom de la classe et/ou méthode qui l'a invoquée.

    Je suis dans un environement posix hpux.

    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Tu ne peux.
    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 éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    ...pas ?

    c'est çà ? dommage mais merci tout de même.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il suffit de démangler typeid(*this).name()

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Il suffit de démangler typeid(*this).name()
    Même pas, puisque :

    j'ai une méthode X, dans cette méthode je voudrais savoir comment récupérer le nom de la classe et/ou méthode qui l'a invoquée.
    @BakaOnigiri : ce que tu veux faire s'appuie énormément sur l'environnement au runtime. Il faudrait explorer la pile. C'est souvent le signe d'une mauvaise conception. Pourquoi veux-tu faire çà ?

  6. #6
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    pour trouver quel est le bout de code qui appel ma méthode X, puisque suite à cet appel on crash mémoire, donc j'esssaye de trouver quel est l'appelant, et la conception a plus de 10 ans

  7. #7
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    c'est complétement temporaire pour débuguer, et je peut pas utiliser de débugueur, parce que c'est dans du code JNI chargé dans une JVM

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ma solution donne bien le type à l'exécution, quoi que puisse dire Obsidian.

  9. #9
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Ma solution donne bien le type à l'exécution, quoi que puisse dire Obsidian.
    Oui, mais ce n'était pas l'objet de la question. Obsidian a indiqué en gras pourquoi ta réponse ne convenait pas.

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si si, ma réponse convient.
    Si après vous avez besoin de répéter le contraire, pourquoi pas hein...

  11. #11
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Si si, ma réponse convient.
    Si après vous avez besoin de répéter le contraire, pourquoi pas hein...
    Bien prouve-le alors! Si j'ai bien compris le PO, il veut déterminer la méthode appelante (ou classe de la méthode appelante), et non pas la classe à laquelle appartient la méthode appelée, ce que fait ta soit-disante solution.

  12. #12
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Si si, ma réponse convient.
    Si après vous avez besoin de répéter le contraire, pourquoi pas hein...
    T'es sûr que tu as bien compris ?

    Imagine que dans main(), j'écris A.test(), il faut que ça écrire "main()", et non pas "A".

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    N'y a-t-il pas tout simplement des fonctions C dans JNI qui permettent d'obtenir la StackTrace java ?

    (sachant qu'il n'a pas de StackTrace en C++. Du moins, pas de StackTrace accessible au programme lui-même...)
    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.

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il n'y a pas d'autre sens à trouver le nom de la classe qui a invoqué une méthode.

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Nom de la classe qui a invoqué une méthode != Nom de la classe qui contient une méthode.

    Nom de la classe qui a invoqué une méthode == Nom de la classe qui contient la méthode qui a invoqué une méthode.
    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.

  16. #16
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Et bien dites donc je ne pensais pas déclencher une guerre de forum, mais bon.

    Donc je rappel le problème

    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
    16
    17
    18
    classe A
    {
    	methode B
    	{
    		C();
    	}
     
    	methode C
    	{
    		chaine = <truc à trouver ici>
    		printf("%s", chaine);
    	}
    }
     
    main
    {
    	A::B();
    }
    çà doit donner :

    Enfin bon il semble que ce ne soit pas possible, ou alors difficilement (gdb semble y arriver, mais c'est un peut un cas à part)

    Donc j'ai revu complétement le bout de code, et donc maintenant le pont C / Java n'est plus en JNI mais en Corba

    Donc je clos le problème, parceque pour moi, j'ai plus de problème, mais la question reste non résolue.

    Merci tout le monde.

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

Discussions similaires

  1. Comment connaître la méthode appelante
    Par aromot dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/06/2015, 14h46
  2. Réponses: 0
    Dernier message: 20/04/2010, 11h35
  3. Réponses: 0
    Dernier message: 21/10/2009, 15h59
  4. java 1.3 recuperer méthode appelante depuis stack
    Par jadey dans le forum Général Java
    Réponses: 1
    Dernier message: 13/04/2009, 20h19
  5. Récupérer le nom de la méthode appelante
    Par benratti dans le forum Langage
    Réponses: 6
    Dernier message: 19/09/2007, 09h55

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