Est-il possible de déboguer dll c++ appelée à partir de C# DllImport?
Je me demande si il n'y a aucune façon de déboguer dll c++ appelée à partir de C# PInvoke dans VS 2010. J'ai essayé de joindre le projet en application en c#, mais il n'a pas de travail - ne pas s'arrêter à un point de rupture.
J'ai aussi essayé d'enregistrer quoi que ce soit avec OutputDebugString dans le projet de C++ mais rien imprimé avec PInvoke appel. En dépit de ces problèmes, la fonction s'exécute bien.
Tous les conseils seront appréciés.
- Ceci pourrait aider, mais il semble que vous auriez besoin de la .fichier pdb de faire quelque chose de valable: social.msdn.microsoft.com/Forums/en-US/vsx/thread/...
- Bien sûr, le projet a de .fichier pdb, mais il n'a pas d'importance. Voir la réponse de Hans.
- BTW, vous pouvez imprimer des messages dans votre DLL. Mais pour être en mesure de voir ces messages dans votre console, vous devez créer la DLL en mode de débogage.
Vous devez vous connecter pour publier un commentaire.
Les deux nécessitent de tourner sur la même option: Projet > Propriétés > onglet Debug > cochez la case "Activer le débogage de code non managé" option.
Vous pouvez maintenant définir un point d'arrêt dans le DLL native code, ce sera à son tour de creux solide dès que le projet C# charge la DLL. Et OutputDebugString() de sortie va aller à la fenêtre de Sortie grâce à la non géré moteur de débogage utilisés.
Si vous exécutez un C++ débogueur alors que votre programme est en cours d'exécution, puis passez à l'Debug->Attach to Process->Trouver votre processus et de la joindre à elle. Vous devriez être en mesure de le déboguer.
Assurez-vous que vous avez compilé votre fichier DLL avec les symboles de débogage. (.apb) fichier et qu'ils sont dans le répertoire où vous exécutez à partir de ce.
Lors de la fixation, de changer le "Attacher à la" valeur "de souche". Le processus ne doit pas être en cours d'exécution en vertu de l'géré débogueur de code - au lieu de "Debug", utilisez la commande "Exécuter" pour lancer.
Aussi, la DLL doit être compilé avec les informations de débogage pour n'importe quelle débogage pour prendre place. Assurez-vous que vous n'êtes pas P/Invoquant la Version de publication.
La OutputDebugString() doit travailler quel que soit le mode de débogage, cependant.