2008-12-15 82 views
3

出于测试目的,我打算组合一个小应用程序,该应用程序将侦听来自应用程序的特定事件并与该应用程序进行交互。如何拦截C#中的调试信息(Debugview样式)?

鉴于我们处于测试过程中的一个地步,即更改应用程序代码不存在问题,从我的角度来看,理想情况是从应用程序监听调试跟踪,有点像debugview确实并且对此作出回应。

任何人都可以提供指导如何最好地去做这件事吗?

回答

4

我发现这样做的方式是使用微软的Mdbg tools来让我从运行时访问核心调试信息。代码的基本形状我使用的是这个样子的:

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; 
     } 
    } 

看来工作不够好,我需要什么无论如何,也许它会提供给任何人有用的模板谁发现自己在同一条船。

+0

你在HandleLogMessage中做什么?它告诉我我无法访问内部委托LogMessageEventHandler? – Apqu 2015-01-25 15:39:17

1

是否想要使用基于标准System.Diagnostics的跟踪进行跟踪的应用程序?在这种情况下,你可以建立你自己的TraceListener