65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的解决方案来查看代码的内部

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (12投票s)

2005年9月21日

CPOL

2分钟阅读

viewsIcon

56253

downloadIcon

908

一个查看代码内部的简单解决方案。

引言

你是否曾想过查看代码内部发生了什么?这个项目实时捕获你应用程序的每个跟踪消息,集中它们,并以友好的方式在屏幕上显示它们。

这个包包含五个项目

  • Tracer 是一个管道服务器,它接收所有的跟踪消息,并在界面上显示它们。
  • EsiListener 是一个自定义监听器,也是管道客户端。它将所有的跟踪消息发送到服务器。
  • CPPEsiListener 是一个 C++ DLL,用于发送消息到 MyTracer。
  • Client 是一个 C# 演示应用程序。它可以是你的应用程序。
  • CPPClient 是一个 C++ 演示应用程序。

它看起来的样子

特点

  • 它很容易添加或移除,而无需更改你的代码。
  • 适用于所有遵循标准跟踪模式的应用程序。
  • 可以同时处理不同的应用程序。
  • 定位应用程序中的跟踪消息。
  • 跟踪对象并显示它们的所有属性和值。

如何使用

  • Listener 可以从源代码添加
    Trace.Listeners.Add( new Esi.Diagnostics.Listener() );
  • Listener 可以像下面显示的那样从你的应用程序配置文件添加
    <system.diagnostics>  
        <trace>    
          <listeners>    
              <add name="myListener" 
                 type="Esi.Diagnostics.Listener, esiListener"/>    
              <remove 
                 type="System.Diagnostics.DefaultTraceListener"/>
          </listeners>   
        </trace> 
    </system.diagnostics>
  • 对于跟踪,只需使用标准跟踪
    Trace.WriteLine( " Hello world :) " ); 
    Trace.Write( "Hello again :P" );
  • 如果你希望 MyTracer 将你的消息识别为错误、信息或警告,请使用下面描述的约定
    • 错误 -> 消息必须以 [E] 开头,
    • 警告 -> 消息必须以 [W] 开头,
    • 信息 -> 消息必须以 [I] 开头,
    • 服务 -> 消息必须以 [S] 开头 (为 MyTracer 应用程序保留),
    • 未知消息 -> 任何其他消息。
    Trace.Write( "[E]Uuuups error :( " );
  • 一个有趣的选择是你可以用一个调用跟踪对象值
    Point p1 = new Point( 5, 5);
    Trace.WriteLine( p1 );
  • 如果你不想在每个应用程序目录中复制 *esiListener.dll*,你可以将 *esiListener.dll* 插入到全局程序集缓存中。
    gacutil -i esiListener.dll
  • 对于 C++,将 *EsiListenerCPP.dll* 复制到应用程序附近。在应用程序项目中添加 *Diagnostics.h* 和 *cpp* (设置选项: 不为 *Diagnostic.cpp* 文件使用预编译头)。在开始跟踪之前,调用
    Trace::Init();

    对于跟踪,调用

    Trace::WriteLine("Trace from C++");

    错误[E], 警告[W], 和 信息[I] 的约定在这里也适用。

参考文献

  • 在 .NET 中使用命名管道进行进程间通信,第 1 部分,作者:Ivan L.
  • TraceListeners 和反射,作者:Jerry Dennany。

其他

我已经更新了这篇文章,特别是为了 ninjacross :)。就这样,谢谢你的关注。

© . All rights reserved.