2010-08-26 4 views
0

Vous avez un grand projet MFC C++. Notre version VS est 2008. Elle charge une DLL régulière (pour certaines fonctionnalités optionnelles) et appelle les fonctions exportées à partir de celle-ci. Lorsque déboguer à travers l'application MFC et arriver au point où nous appelons la fonction exportée, vous ne pouvez pas entrer dans la fonction dll. Y at-il un moyen d'obtenir le débogage dans les fonctions de la DLL. Même si le projet dll est inclus dans la solution C++, il ne semble pas "voir" le code dll. Edit: Nous avons un certain nombre de DLL d'extension et le débogage en eux fonctionne très bien. C'est un dll droit, pas d'option mfc,/clr pour que nous puissions appeler du code managé. La classe qui consomme cette DLL, la charge, puis utilise GetProcAddress pour trouver des pointeurs vers les fonctions exportées. Voici des exemples.Vous cherchez comment déboguer dans une fonction dll exportée dans VS 9. Possible?

typedef void (*FP_OnEditOptions)(); 

pour protéger la fonction. puis

m_fpOnEditOptions = (FP_OnEditOptions) GetProcAddress(hInstance, "Direct_Edit_Options"); 

pour obtenir le pointeur de proc, puis

static void OnEditOptions() 
{(*m_fpOnEditOptions)();} 

pour l'appeler. Lors du débogage, appelez-le, appuyez sur F11, et il l'appelle, mais n'intervient pas. Oui, la DLL dispose d'une option de débogage, et lorsque le module est chargé, les symboles sont chargés à partir de: le fichier pdb approprié.

Thx,

Andy

+0

Juste s'assurer, la DLL est construite avec des informations de débogage, non? – monoceres

+0

oui, c'est. THX. – Andruski

Répondre

0

Debug + Windows + Modules. Recherchez la DLL dans la liste et cliquez dessus avec le bouton droit. L'information de chargement de symbole vous indique où le débogueur a cherché le fichier .pdb. Assurez-vous de l'avoir là. Après la mise à jour: il est très probable que, avec/clr activé, vous exécutiez réellement du code qui a été compilé en IL et compilé juste à temps. Tout comme le code géré. Vous devrez basculer le débogueur en mode de débogage en mode mixte. Projet + Propriétés, Débogage, Type de Débogueur = Mixte.

+0

Salut, oui vérifié cela et les symboles sont en cours de chargement. Voir les modifications pour plus d'informations. Peut-être que je n'ai pas été assez précis. Thx pour l'info; Je ne savais pas comment vérifier cela. – Andruski

+0

Je ne sais pas, vous devriez en effet avoir mentionné/clr avant. Ce code géré est-il en cours d'utilisation? Définissez simplement un point d'arrêt sur la fonction DLL que vous souhaitez déboguer. –

+0

Mentionnez également si le point d'entrée du programme est géré. –

0

Regardez sous Outils-> Options-> Debugging-> Général

Il y a deux options qui peuvent aider - je ne suis pas sûr que l'on vous exactement besoin. Les 2 plus évidentes sont:

  • Désactiver « Just My Code »
  • Désactiver « Etape sur les propriétés et les opérateurs »

Vous pouvez également essayer de mettre un point d'arrêt dans la fonction qui est en cours sauté par-dessus. Cela devrait forcer le débogueur à s'arrêter à ce code.

Questions connexes