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 :

Catcher une exception lancée dans un plugin


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Catcher une exception lancée dans un plugin
    Bonjour,

    Voilà j'ai un gros problème sous HP-UX pour catcher dans un exécutable une exception lancée dans un plugin (shared library). J'ai lu sur le net qu'il fallait pour cela spécifier le flag RTLD_GLOBAL lors de l'appel à dlopen(), mais rien n'y fait, même comme ça ça ne fonctionne pas. En guise d'exception je prend un signal d'interruption logicielle.

    L'appel de dlopen() ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dlopen("<laLibrairie>", RTLD_LAZY | RTLD_GLOBAL);
    Y a-t-il autre chose de particulier à faire ? Existe-t-il une autre manière de loader une shared library qu'avec dlopen() ? Pour info, j'utilise le compilateur aCC... y aurait-il une option à activer ? (je compile avec l'option -AA indispensable à la gestion des exceptions...)

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Il me semblait que la méthode type consistait à ne laisser remonter aucune exception hors du plugin. Renvoie plutôt des codes d'erreurs.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Je ne comprend pas quelle est la valeur ajoutée de cette méthode par rapport à une gestion par exception ? Je vais devoir retourner un code ET la chaine contenant le message contenu dans l'exception..... pour quoi faire ??

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Ce n'est pas une question de valeur ajoutée. Juste que les exceptions ne franchissent normalement pas les barrières des plugins/dll/... On est souvent obligés de toutes les intercepter dans les fonctions de l'interface des bibliothèques.

    Maintenant, si ton compilateur le permet tu es "chanceux". M'est avis que tu devrais poser la question dans les forums de HP -- aCC est bien un compilateur de HP ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Luc Hermitte
    Maintenant, si ton compilateur le permet tu es "chanceux". M'est avis que tu devrais poser la question dans les forums de HP -- aCC est bien un compilateur de HP ?
    OK je ne savais pas que c'était pas toujours le cas, mais je pense que aCC le permet. Sur une liste de diffusion HP j'ai vu :
    - qu'il fallait RTLD_GLOBAL pour lancer des exceptions à travers un plugin
    - que quand un exe est compilé sans l'option -AA, il est incapable de catcher des exception comme std::bad_alloc, car il ne connaît pas les namespace... ce qui sous-entend bien qu'en tant normal c'est possible

    Mais je vais me renseigner plus en détail pour être absolument sûr qu'il le permet...

    Et oui, aCC est bien un compilo HP.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    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 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Utiliser les exceptions dans un plugin est une mauvaise idée, car chaque compilo implémente à sa manière les exceptions. Si tu charges un plugin qui a été compilé avec un autre compilo / autre version, tu cours à la catastrophe.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Oui je me doute bien, mais là il ne s'agit pas du tout de plugins dans le sens "je développe le framework et d'autres gens qui me sont complètement étrangers feront tous les plugins qu'ils veulent derrière". Non, là c'est nous qui faisons tout. Il y a un framework central pour mutualiser l'effort sur les parties communes, et des plugins spécifiques à chaque flux de migration, le tout compilé dans un même build afin d'être livré au client en tant que SSA du système informatique que nous développons. Nous ne sommes pas du tout dans le cadre d'un logiciel destiné à être distribué.

  8. #8
    Membre habitué
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Points : 161
    Points
    161
    Par défaut
    Je risque d'être totalement dans les vapes, mais comme c'est peut-être une piste...

    avec GCC :
    Citation Envoyé par man dlopen
    Les références externes de la bibliothèque sont résolues en utilisant
    les bibliothèqujes mentionnées dans sa liste de dépendances, et toutes
    les autres bibliothèques éventuellement ouvertes auparavant avec
    l'attribut RTLD_GLOBAL. Si l'édition des liens de l'exécutable a été
    faite avec l'option "-rdynamic", alors ses symboles globaux seront
    également employés pour résoudre les références de la bibliothèque
    chargée dynamiquement.
    L'option "-rdynamic" est une option du ld des binutils, mais il y a peut-être l'équivalent avec aCC ..?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Cela fait plusieurs fois que je parcours le man et je ne vois rien parmi les options qui semble correspondre.

    Bon en attendant d'éventuelles nouvelles infos je vais essayer quand même de voir si le rôle de l'exécutable dans la gestion des erreurs ne peut pas être réduit à son strict minimum... la classe mère des plugins se chargerait de faire les try/catch, logger les messages et renvoyer juste un code genre echec/succès. C'est jouable.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/09/2009, 17h48
  2. Réponses: 2
    Dernier message: 13/05/2008, 17h19
  3. Réponses: 2
    Dernier message: 18/03/2008, 09h23
  4. Réponses: 5
    Dernier message: 20/11/2007, 16h04
  5. Réponses: 2
    Dernier message: 02/07/2007, 15h05

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