2008-12-15 10 views
3

À des fins de test, je prévois de mettre en place une petite application qui va écouter un événement particulier provenant d'une application et interagir avec elle à ce moment-là. Étant donné que nous sommes à un point dans le processus de test où il est hors de question de changer le code de l'application, l'idéal de mon point de vue serait d'écouter la trace de débogage de l'application, un peu comme debugview fait, et répond à cela.Comment intercepter les informations de débogage (style Debugview) en C#?

Quelqu'un peut-il offrir des conseils sur la meilleure façon de procéder?

Répondre

4

La façon dont j'ai trouvé le faire a utilisé le Mdbg tools de Microsoft pour me donner accès à partir du runtime aux informations de débogage de base. La forme de base du code que je utilise ressemble à ceci:

MDbgEngine mg; 
MDbgProcess mgProcess; 
try 
{ 
     mg = new MDbgEngine(); 
     mgProcess = mg.Attach(debugProcess.Id); 
} 
catch (Exception ed) 
{ 
     Console.WriteLine("Exception attaching to process " + debugProcess.Id); 
     throw (ed); 
} 
mgProcess.CorProcess.EnableLogMessages(true); 
mgProcess.CorProcess.OnLogMessage += new LogMessageEventHandler(HandleLogMessage); 
mg.Options.StopOnLogMessage = true; 
mgProcess.Go().WaitOne(); 
bool running = true; 
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress); 
    while (running) 
    { 
     try 
     { 
      running =mgProcess.IsAlive; 
      mgProcess.Go().WaitOne(); 
     } 
     catch 
     { 
      running = false; 
     } 
    } 

Il semble fonctionner assez bien pour ce que je dois en tout cas, il sera peut-être fournir un modèle utile à quelqu'un d'autre qui se trouve dans la même bateau.

+0

Que faites-vous dans HandleLogMessage? il me dit que je ne peux pas accéder au délégué interne LogMessageEventHandler? – Apqu

+0

@Tur, je crains que ce soit quelques années et quelques versions de .Net il ya - je ne pouvais pas dire du tout qu'ils n'ont pas changé le comportement de ce quelque peu. – glenatron

1

L'application que vous souhaitez suivre utilise-t-elle le suivi System.Diagnostics standard? Dans ce cas, vous pouvez créer votre propre TraceListener.