2010-03-26 9 views
4

J'ai un service C# qui appelle une DLL C écrite à l'origine dans VC6.Débogage du code natif

Il y a un bogue dans la DLL que j'essaie d'inspecter. Après avoir eu un cauchemar en essayant de faire fonctionner le débogage j'ai fini par ajouter la DLL à la solution VS2005 contenant le service C# et j'ai ajouté le _CRT_SECURE_NO_WARNINGS nécessaire.

La version de débogage du service est enregistrée à l'aide de l'outil 'installutil.exe'.

Je peux obtenir le débogueur à se casser juste avant la ligne où la DLL est entrée via un appel à System.Diagnostics.Debugger.Break();.

J'ai trouvé quelques instructions sur le net pour passer au débogage du code non managé et activé la case à cocher 'Activer le débogage de code non managé', j'ai également essayé d'activer les options-> Débogage-> Native 'Load DLL exports' et 'Activer le débogage RPC' (même si ce n'est pas COM). J'ai également copié le debug dll et .pdb dans le même répertoire bin que le service.

Cependant le code non managé n'est pas entré dans lequel est ce dont j'ai vraiment besoin.

MISE À JOUR: J'ai trouvé le type de débogage dans les propriétés de la DLL et l'ai défini sur 'Mixed' comme suggéré sur plusieurs sites mais en vain.

UPDATE2: Mon projet émet maintenant la DLL de débogage et le pdb dans le même répertoire que le service de débogage. Toujours incapable de déboguer la DLL.

Répondre

0

En fin de compte, j'ai créé une application console et recréés tous les appels avant tout pour vous assurer que l'appel agirait comme dans le service réel avec les paramètres réels une fois qu'il est arrivé.

J'ai fait une chronique de mon correctif et du code résultant au my site.

2

Essayez de définir le code non managé en tant que projet de démarrage. Je sais que cela n'a pas de sens mais je me souviens que cela fonctionnait pour un projet très similaire.

Étant donné que la DLL ne possède pas d'exécutable associé, lorsque vous essayez de l'exécuter, elle s'affiche et vous demande quelle application exécuter. Accédez à votre application C# et vous devriez être prêt à partir.

Heureux débogage!

EDIT: il a été un certain temps, mais je pense que le type de débogage mixte est correct

+0

C'est un service - vous ne pouvez pas exécuter un service en tant qu'application. –

+0

Euh, je me demandais à ce sujet. Je ne sais pas grand-chose des services que j'ai peur. Comment déboguer un service sans le problème de DLL? –

+0

En outre, si vous ne pouvez pas obtenir ce travail via un autre moyen, vous pouvez écrire une application C# très simple juste pour déboguer la DLL. –

0

Il existe une solution de contournement dans Visual Studio 2013. Exécutez l'application à partir de la ligne cmd. Lorsque System.Diagnostics.Debugger.Break(); est atteint, une fenêtre Débogueur Just-In-Time de Visual Studio doit apparaître. Cochez la case "Choisir les moteurs de débogage manuellement", cliquez sur "Oui" et vérifiez que le moteur "Native" est coché. Cliquez sur OK". Vous devriez maintenant pouvoir entrer dans le code natif comme si vous le faisiez en exécutant le code depuis VS.