2008-09-24 20 views
6

Je suis en train de développer un assemblage C# qui doit être appelé via COM à partir d'une application Delphi 7 (iow, native win32, pas .net).Comment puis-je déboguer un assembly C# COM lorsqu'il est appelé à partir d'une application native win32?

Jusqu'à présent, cela semble fonctionner. J'ai exporté un fichier TLB, l'ai importé dans mon projet Delphi et je peux créer mon objet C# et appeler ses fonctions.

Donc, c'est génial, mais bientôt je vais vraiment voulez utiliser Visual Studio pour déboguer le code C# pendant qu'il est en cours d'exécution. Définir des points d'arrêt, parcourir le code, tout ça.

J'ai essayé de casser le code Delphi après la création de l'objet COM, puis je cherchais un processus pour que VS puisse s'y attacher, mais je ne peux pas en trouver un.

Existe-t-il un moyen de configurer VS2008 pour cela? Je préférerais juste être en mesure d'appuyer sur f5 et avoir VS démarrer l'exécutable Delphi, attendre que le code C# soit appelé, puis s'y attacher .. Mais je pourrais vivre avec attacher manuellement à un processus, je suppose.

Juste s'il vous plaît ne me dites pas que je dois faire avec MessageBox.Show etc.

Répondre

10

Dans la page des propriétés du projet VS2008, dans l'onglet Déboguer, vous pouvez définir une action de démarrage différente.

Ceci peut être utilisé pour exécuter un programme externe (par exemple votre application Delphi) lorsque vous appuyez sur F5.

+0

Wow, ça marche! Merci. – Blorgbeard

+0

C'est très pratique. Je l'ai découvert lors de l'écriture d'un assemblage C# qui était appelé depuis Excel. –

9

Placez le suivant dans la méthode que vous souhaitez debug:

#if DEBUG 
    if (!System.Diagnostics.Debugger.IsAttached) 
     Debugger.Launch(); 
#endif 

Lorsque vous souhaitez déboguer, Construire une version de débogage et l'utiliser dans votre application. Lorsque ce code s'exécute, une boîte de dialogue vous demande si vous souhaitez attacher un débogueur.

+1

C'est un truc vraiment sympa! – Blorgbeard

1

Vous pouvez simplement attacher à l'application native et voir le point d'arrêt, voir les piles, les montres, etc. normalement. Vous devrez vous attacher après la création de l'objet COM.

Je mets un MsgBox Afx lorsque l'objet est créé pour arrêter le flux de l'application puis attacher le débogueur.