2010-06-22 4 views
1

J'écris une DLL addin en C# pour une application hôte écrite en C++ (je n'ai pas de source pour l'application hôte). Lorsque j'exécute l'application hôte, elle charge ma DLL pour l'utiliser pendant cette session. Récemment, j'ai été voir l'erreur suivante lors de la sortie de l'application hôte:Comment faire pour déboguer C++ Runtime Erreur causée par ma DLL?

Microsoft Visual C++ Runtime Library 
Runtime Error! 
Program: MyHostApp.exe 

This application has requested the Runtime to terminate it in an unusual way... 

Cette boîte de dialogue ne contient qu'un bouton « OK » (pas de bouton de mise au point). Après avoir appuyé sur OK, l'application hôte quitte sans donner d'indication sur ce qui a pu causer l'erreur.

J'ai trouvé ce fil stackoverflow avec un problème similaire ...

How to debug a Visual C++ Runtime Error

Mais, chaque fois que je tente de joindre VS2008 à l'application écrasé, puis faire un « tout casser » comme indiqué, je que le message suivant de VS:

«. Impossible de briser l'exécution Ce processus n'est pas en train d'exécuter le type de code que vous avez sélectionné pour déboguer »

Comment dois-je aborder le débogage?

Répondre

0

Avez-vous essayé de définir l'option "Code Natif" lors du démarrage du débogueur?

+0

Si vous voulez dire "Outils | Options | Débogage | Juste-à-temps | Natif", oui, c'est coché. –

+0

Ah, je pense que je vois ce que vous voulez dire ... Dans la boîte de dialogue "Attach to Process", je peux sélectionner "Native code". Cela me permet de dépasser le message initial mentionné dans le PO. Cependant, maintenant, quand je fais un "break all", je reçois un "Aucun symbole n'est chargé pour n'importe quel cadre de pile d'appels Le code source ne peut pas être affiché." Je suppose que c'est logique car je n'ai pas de source ou de symboles pour l'application hôte qui plante. Je suis certain que quelque chose dans ma DLL provoque le crash de l'hôte, je ne sais pas comment le trouver ... –

0

C# ne génère pas de code natif! Même si l'application est native, C# est exécuté dans CLR imbriqué. Choisissez "Code managé".

En outre, au lieu de "Break all", définissez une pause sur toutes les exceptions possibles, puis exécutez-le à l'échec.

Questions connexes