logiciel Comment attacher le débogueur pour passer en code natif(C++) à partir d'un wrapper géré(C#)?




what is a wrapper (4)

J'ai un wrapper autour d'un appel de fonction C ++ que j'appelle du code C #. Comment attacher un débogueur dans Visual Studio pour entrer dans le 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 veux étudier la cause première.

Merci, Nikhil


Answer #1

En plus des conseils de Lou pour démarrer le débogueur, vous pouvez sélectionner les moteurs de débogage qui sont utilisés lors de la connexion à un processus existant en cliquant sur 'Select ...' dans la boîte de dialogue 'attach to process' et en choisissant 'managed code' et ' code natif'.

Le débogage de cette manière est appelé le débogage en mode mixte. Voir cet article de blog pour quelques conseils.

Je crois que ce n'est pas pris en charge pour les processus 64 bits ... bien aimerait avoir tort sur ce point.


Answer #2

Vérifiez l'onglet Déboguer sur la page de propriétés de votre projet. Il devrait y avoir une case à cocher "Activer le débogage de 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 en cours de construction à partir d'un autre projet (pendant un certain temps, nous avons été construits avec VS6), assurez-vous que le fichier pdb de la DLL est bien pratique pour le débogage.

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


Answer #3

Pour toute personne utilisant WinDbg:

1> Symboles d'installation

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

.sympath
.sympath+ 
.symfix

2> Configurer le chemin source

.srcpath

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

(Assurez-vous que la configuration du chemin d'extension est correcte)

Ajouter Microsoft.NET \ Framework \ v2.0.50727 pour x86 using-

.extpath 

Définissez un point d'arrêt pour le clr à charger.

sxe ld:mscorwks

(F5 / g) (Attendre le chargement du module ModLoad sur mscorwks.dll)

Assurez-vous de ne pas avoir un duplicata sos déjà chargé. Voir:

.chain

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

.loadby sos mscorwks

4> Recharger tous les symboles ..

.reload

Maintenant vous êtes tous ensemble :)

(YMMV)


Answer #4

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





debugging