【问题标题】:How to intercept debugging information ( Debugview style ) in C#?如何在 C# 中截获调试信息(Debugview 风格)?
【发布时间】:2008-12-15 10:31:23
【问题描述】:

出于测试目的,我计划制作一个小应用程序,该应用程序将侦听来自应用程序的特定事件并在那时与之交互。

鉴于我们正处于测试过程中无法更改应用程序代码的阶段,从我的角度来看,理想的做法是听取应用程序的调试跟踪,有点像 debugview ,并对此做出回应。

任何人都可以提供有关如何最好地进行此操作的指导吗?

【问题讨论】:

    标签: c# debugging testing trace


    【解决方案1】:

    我发现这样做的方法是使用 Microsoft 的 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;
             }
         }
    

    无论如何,它似乎已经足够满足我的需要了,也许它会为其他发现自己处于同一条船上的人提供一个有用的模板。

    【讨论】:

    • 你在 HandleLogMessage 中做什么?它告诉我我无法访问内部委托 LogMessageEventHandler?
    • @Tur,恐怕这是几年前的几个版本的 .Net - 我根本不能说他们没有改变这种行为。
    【解决方案2】:

    您要使用基于标准System.Diagnostics 的跟踪来跟踪应用程序吗?在这种情况下,您可以构建自己的TraceListener

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多