Comment attacher un débogueur pour accéder au code natif (C++) à partir d'un wrapper géré (C#) ?

StackOverflow https://stackoverflow.com/questions/57840

Question

J'ai un wrapper autour d'un appel de fonction C++ que j'appelle à partir du code C#.Comment attacher un débogueur dans Visual Studio pour accéder au code C++ natif ?

C'est le wrapper que j'ai qui appelle GetData() défini dans un fichier C++ :

    [DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl, 
               EntryPoint = "GetData", BestFitMapping = false)]
        public static extern String GetData(String url);

Le code plante et je souhaite rechercher la cause première.

Merci, Nikhil

Était-ce utile?

La solution

Vérifiez l'onglet Débogage sur la page des propriétés de votre projet.Il devrait y avoir une case à cocher « Activer le débogage du code non géré ».Cela a fonctionné pour moi lorsque nous avons développé une nouvelle interface utilisateur .NET pour nos anciennes DLL C++.

Si votre DLL non gérée est construite à partir d'un autre projet (pendant un certain temps, la nôtre a été construite à l'aide de VS6), assurez-vous simplement d'avoir le fichier pdb de la DLL à portée de main pour le débogage.

L'autre approche consiste à utiliser l'exe C# comme exe cible à exécuter à partir du projet DLL, vous pouvez ensuite déboguer votre DLL normalement.

Autres conseils

en plus des conseils de Lou pour démarrer le débogueur, vous pouvez sélectionner les moteurs de débogage à utiliser lors de l'attachement à un processus existant en cliquant sur "Sélectionner..." dans la boîte de dialogue "attacher au processus" et en choisissant à la fois "code managé" et " code natif'.

Le débogage de cette manière est appelé débogage en mode mixte.Regarde ça article de blog pour quelques conseils.

Je pense que cela n'est pas pris en charge pour les processus 64 bits...mais j'adorerais me tromper sur ce point.

À toute personne utilisant WinDbg :

1>Symboles de configuration

Regardez ces commandes.(Aide:dans la console .hh < commande> )

.sympath
.sympath+ 
.symfix

2> Configurer le chemin source

.srcpath

3> Chargez l'extension SOS pour déboguer les programmes en mode géré/mixte.

(Assurez-vous que le chemin d'extension est correctement configuré)

Ajoutez Microsoft.NET\Framework\v2.0.50727 pour x86 en utilisant-

.extpath 

Définissez un point d'arrêt pour le chargement du clr.

sxe ld:mscorwks

(F5 / g) (attendre le modload bp sur mscorwks.dll)

Assurez-vous de ne pas avoir d'extension sos en double déjà chargée.Voir:

.chain

Nous sommes maintenant prêts à charger l'extension sos.:)

.loadby sos mscorwks

4> Rechargez tous les symboles.

.reload

Maintenant, vous êtes prêt :)

(YMMV)

Le débogage mixte n'est pas pris en charge en mode 64 bits (à partir de Visual Studio 2008).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top