一个简单的解决方案来查看代码的内部
一个查看代码内部的简单解决方案。
引言
你是否曾想过查看代码内部发生了什么?这个项目实时捕获你应用程序的每个跟踪消息,集中它们,并以友好的方式在屏幕上显示它们。
这个包包含五个项目
- 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 :)。就这样,谢谢你的关注。