32 votes

Impossible de déboguer la DLL non gérée à partir de C #

J'ai une DLL qui a été écrit en C++ et appelé à partir d'une application en C#. La DLL est du code non managé. Si je copie la DLL et ses .fichiers pdb avec un événement post-construction de l'application en C# de débogage de l'exécution dir je n'ai pas encore atteint l'un des points de rupture je l'ai mis dans le code de la DLL. Le point de rupture a un message attaché à elle en disant que "pas de symboles ont été chargés de ce document".

Que dois-je faire pour obtenir le débogage dans la source de la dll?

J'ai "Outils->Options->Options de Débogage->Général->Activer uniquement mon code" personnes Handicapées. La DLL est compilé avec "Runtime de suivi et de désactiver les optimisations (/ASSEMBLYDEBUG)" et de Générer des informations de Débogage sur "Oui (/DEBUG)"

59voto

JaredPar Points 333733

Pour déboguer dans votre DLL C++, vous devez activer le débogage en mode mixte sur l'application de démarrage dans votre solution.

  • Clic droit sur le projet -> Propriétés
  • Aller à l'Onglet Débogage
  • Cochez la case "Activer le débogage de code non managé"

Cela va vous permettre de déboguer en code natif pour un F5 style de scénario. Si vous voulez l'activer pour la fixation sur le processus, puis effectuez les opérations suivantes dans la "Attacher au Processus de Dialogue"

  • Sélectionnez le processus de débogage
  • Cliquez sur "Sélectionner ..." bouton ci-dessus la liste des processus
  • Cliquez sur "Debug ces types de code"
  • Vérifiez les deux Natifs et Gérés

4voto

Brian R. Bondy Points 141769

Vous devez activer le non géré (Natif) de débogage.

Si vous attachez pour le processus une fois qu'il est commencé:

Allez dans le menu Outils, puis attacher au processus, assurez-vous d'avoir natif de débogage activé.

Vous verrez un accès en lecture seule zone d'édition:

Joindre à: code Managé, code Natif [Sélectionner]

Assurez-vous que le code Natif est répertoriée. Si ne pas l'ajouter.

Si vous lancez votre projet dans visual studio:

Sur votre projet de propriétés que vous démarrez en mode de débogage. Accédez aux Propriétés du projet, puis sélectionnez l'onglet débogage.

Assurez-vous que cette case est cochée:

Activer le débogage de code non managé

1voto

Joseph Points 18099

Lorsque vous vous attachez à un processus à déboguer, vous devez spécifier la façon dont vous souhaitez vous attacher. Vous avez quelques options, à savoir Géré et Natif. Pour déboguer du code C # avec du C ++ non managé, vous devez vous attacher à un processus en tant que Managed et en tant que Native (les deux peuvent être sélectionnés en même temps).

0voto

Martin.kv Points 917

J'avais fait face au même problème et j'ai fait tout ce qui était suggéré dans la réponse acceptée, mais les points d'arrêt dans la DLL non gérée n'étaient pas atteints!

Cependant, quand j'ai fait ce qui suit, j'ai finalement pu déboguer la DLL!

Sélectionnez une solution dans l'Explorateur de solutions
Sélectionnez dans le menu | Outils | options | Débogage | Général
Décochez "Exiger que les fichiers source correspondent exactement à la version d'origine"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X