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 :

Déboguer une dll


Sujet :

C++

  1. #1
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut Déboguer une dll
    Hello,

    Petite question rapide,

    Je bosse actuellement sur le développement d'un plug-in (sous forme de dll) pour un logiciel existant.

    Actuellement, l'appli hôte est compilée avec minGW en release (dernière version je crois)
    Et moi je bosse avec VS2012.

    Pour déboguer la dll, il faut que l'appli hôte soit compilée avec le même compilo que la dll, et que les deux soient compilés en debug ?

    Si oui, va falloir que je chope les sources ou l'exe compilé en debug (et si possible avec VS2012), car bon, développer sans debugger, ça sens la grosse prise de tête

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    A vue de nez je ne pense pas que recompiler l'original soit forcément nécessaire pour débugger. Tu n'auras les infos de débug que pour ta DLL, donc à toi de voir en fonction de ton cas si ça suffit ou pas...
    Le hic c'est la compatibilité binaire entre hôte et DLL...mais à priori si tu peux compiler une DLL avec vs2012 pour un exe en migw c'est que ce problème est géré...
    Mais sinon, sans connaître ton problème, tu dois déjà pouvoir travailler un peu avec des main de test pour débroussailler le terrain, non? Pour les cas où c'est possible c'est généralement 1000 fois moins lourd et moins chronophage...

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,


    Avant de commencer: comme tu es dans la section "C++" (et non C qui se trouve ici), je vais partir du principe que tu parle de débugger une dll qui a été écrite en C++.

    Si cette assertion est fausse, indique le moi rapidement, je déplacerai la discussion dans la bonne section

    Ceci étant dit, j'ai envie de m'écrier:

    Oulalah, il faut être particulièrement prudent!!!

    Le fait est que C++ a besoin d'exposer les noms (de fonctions, de types, ...) d'une manière particulière du fait des possibilités qu'il offre et que n'offre pas son vénérable ancêtre le C.

    Bien qu'il *semblerait* qu'il soit question de standardiser cette forme, ce n'est pas encore fait, ce qui fait qu'une dll compilée avec mingw a excessivement peu de chance de fonctionner avec une application compilée avec visual studio, et inversement.

    A vrai dire, ca va meme beaucoup plus loin car il n'y a aucune certitude (pour l'instant du moins) qu'une dll compilée avec VS2005 puisse être utilisée avec une application compilée avec VS1012 ou inversement

    Bon, je te rassure, ce dernier cas *devrait* pouvoir passer, mais... KISSAI, ce ne sera peut être pas le cas éternellement

    En plus, il faut prendre en compte que les informations de débuggages placées dans la dll dépendent... exclusivement du compilateur qui compile la dll

    Une même cause ayant les mêmes effets, tu peux te dire que, même si tu arrivais à exécuter ta dll compilée avec mingw en partant d'une application compilée avec VS (ce dont je doute énormément), il y aurait peu de chances que le débuggeur de VS puisse lire correctement les informations écrites pour être lues par GDB

    Donc, la conclusion est assez simple : si tu travailles sur un code C++, tu ne pourras débugger ta dll que si tu la compile avec le même système (et les mêmes options de compilation!!) que celui que tu utilises pour compiler l'application qui l'utilise.

    En C, je ne sais pas trop... Cela pourrait avoir une chance de fonctionner, mais je n'en suis pas du tout persuadé (le mode release devrait marcher, mais pour le mode debug... )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par therwald Voir le message
    A vue de nez je ne pense pas que recompiler l'original soit forcément nécessaire pour débugger. Tu n'auras les infos de débug que pour ta DLL, donc à toi de voir en fonction de ton cas si ça suffit ou pas...
    J'ai de toute façons pas les sources de l'hôte, les infos de debug me seront pas très utiles.
    Citation Envoyé par therwald Voir le message
    Mais sinon, sans connaître ton problème, tu dois déjà pouvoir travailler un peu avec des main de test pour débroussailler le terrain, non? Pour les cas où c'est possible c'est généralement 1000 fois moins lourd et moins chronophage...
    Aucun problème en particulier pour le moment, je viens d'avoir le code.

    Citation Envoyé par koala01 Voir le message
    Donc, la conclusion est assez simple : si tu travailles sur un code C++, tu ne pourras débugger ta dll que si tu la compile avec le même système (et les mêmes options de compilation!!) que celui que tu utilises pour compiler l'application qui l'utilise.
    C'est bien du C++ (aussi bien coté hôte que dll).
    Donc c'est encore plus restrictif que je pensais, me faut soit les sources, soit la version du compilo et les options de compilation.

    Merci.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Là où c'est restrictif c'est au niveau de l'ABI (les interfaces au niveau binaire entre la DLL et le code hôte).
    Si ton ABI est du type C (que des fonctions libres, que des arguemnts/retour types de base ou pointeur) il y a des moyen de faire ça même dans un environnement C++) alors tu peux faire entre deux compilateurs différents et que ce soit en debug ou au runtime ça passera.
    Par contre si l'ABI est en C++ aussi (par ex API avec des classes exposées sans précautions particulières) alors non seulement tu ne peux pas débugger, mais il faut de toutes façons compiler ta DLL avec mingw comme pour l'hôte, sinon ça ne fonctionnera pas du tout (points d'entrée non trouvés, random crash à l'appel ou au retour de la DLL, etc)

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

Discussions similaires

  1. Déboguer une dll ActiveX avec Delphi2006
    Par [DreaMs] dans le forum EDI
    Réponses: 0
    Dernier message: 11/10/2007, 11h43
  2. Déboguer une dll ActiveX avec Delphi2006
    Par [DreaMs] dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 10/10/2007, 17h09
  3. Comment déboguer une DLL??
    Par Mickey.jet dans le forum EDI
    Réponses: 5
    Dernier message: 30/03/2006, 08h50
  4. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07

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