2009-11-16 14 views
31

J'ai une DLL qui a été écrite en C++ et appelée à partir d'une application C#. Le DLL est un code non géré.Impossible de déboguer Dll non géré à partir de C#

Si je copie les DLL et ses .pdb fichiers avec un événement post de construction à l'exécution de débogage de l'application C#dir Je ne peux toujours pas frapper les points de rupture que je mets dans le code DLL. Le point d'interruption est associé à un message indiquant que "aucun symbole n'a été chargé pour ce document".

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

Je "Tools ->Options ->Debugging ->General ->Enable que mon code" Désactivé. Le DLL est compilé avec « suivi de l'exécution et de désactiver les optimisations (/ ASSEMBLYDEBUG) » et générer des informations de débogage « Oui (/ DEBUG) »

Répondre

55

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.

  • Faites un clic droit sur le projet - > Propriétés
  • Aller à Debug Tab
  • Cochez la case "Activer le débogage de code non managé"

Cela vous permettra de déboguer en code natif pour un scénario de style F5 . Si vous voulez l'activer pour attacher au processus puis procédez comme suit sur le bouton « Attacher au processus » Dialog

  • Sélectionnez le processus de débogage
  • Cliquez sur « Select ... » au-dessus du processus liste
  • Cliquez sur « Debug ces types de code »
  • Vérifiez les deux gérés et autochtones
+0

Pendant que je vais répondre, je n » étais pas Je suis sûr que si c'était si simple ou pas. Si c'est si simple, je l'ai probablement mal utilisé en essayant de déboguer le code C++ géré qui s'interface avec le code natif. –

+2

Notez que si votre projet de démarrage utilise un autre projet DLL C# qui appelle réellement la DLL C++, le projet de démarrage doit également avoir "Activer le débogage de code non géré" activé. –

+2

Sélectionnez la solution dans l'Explorateur de solutions. Sélectionnez dans> Menu | Outils | options | Débogage | Général et décochez "Exiger que les fichiers source correspondent exactement à la version d'origine" – Martin

4

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

Si vous connectez au processus après son démarrage:

Allez dans le menu Outils, puis attacher à traiter, assurez-vous que le débogage natif activé.

Vous verrez une lecture seule boîte d'édition:

ANNEXER au: code managé, code natif [Sélectionner]

assurer que le code natif figure dans la liste. Sinon, ajoutez-le.

Si vous commencez votre projet à partir de Visual Studio:

propriétés de votre projet que vous commencez en mode débogage. Allez dans les propriétés du projet, puis sélectionnez l'onglet de débogage.

Assurez-vous que cette case est cochée sur:

Activer le débogage du code non managé

1

Lorsque vous connectez à un processus de débogage, vous devez indiquer comment vous souhaitez joindre. Vous avez quelques options, à savoir Managed et Native. Pour déboguer du code C# avec du C++ non géré, vous devez vous connecter à un processus en tant que Managed et en tant que Native (les deux peuvent être sélectionnés en même temps).

0

j'avais fait face à la même question et a fait tout cela a été suggéré dans la réponse acceptée, mais les points d'arrêt dans le dll non géré n'a pas été getti hit ng!

Cependant quand j'ai fait ce qui suit je pourrais enfin déboguer la DLL!

Sélection solution dans l'Explorateur de solutions
Sélectionnez dans le menu | Outils | Options | Debugging | Général
Décochez la case « Exiger des fichiers source pour correspondre exactement à la version originale »