Comment attacher un débogueur pour accéder au code natif (C++) à partir d'un wrapper géré (C#) ?
-
09-06-2019 - |
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
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).