有人用过Systems.Diagnostics.Trace和Systems.Diagnostics.Debug吗?

RexZheng 2006-04-11 10:40:46
MSDN有如下说明:

幸运的是,不必一行一行地逐句通过应用程序来弄清楚发生了什么。Systems.Diagnostics 命名空间包括 Trace 和 Debug 类。这两个类(它们本质上相同)包括许多静态方法,这些方法可以用于使代码收集有关代码执行路径、代码覆盖范围甚至是性能分析的信息。两个类还提供 Assert 方法,该方法检查条件,并在条件为 false 时显示一条消息。

若要使用 Trace 和 Debug 类,请执行下列三个步骤。

定义 TRACE 或 DEBUG 符号。
创建对应的 Listener 的新实例。
向代码中添加对 Trace 或 Debug 类的调用。
定义 — 若要启用调试或跟踪,必须首先定义对应的符号。对于 Visual C#(以及 C++ 托管扩展)或 Visual Basic .NET,可以在编译时使用条件编译开关 /d(efine) 定义,如下面的代码所示:

csc /target:library /debug+ /d:TRACE math.cs
vbc /target:library /debug+ /d:TRACE=True math.vb
源代码本身也可以定义符号,如下面的代码所示:

#define TRACE // for C# or the Managed Extensions for C++
#Const TRACE=1 ' for Visual Basic .NET
创建 — 由 TraceListener 捕获 Debug 和 Trace 输出。默认情况下,输出自动发送到 DefaultTraceListener,它再使用 OutputDebugString Windows API 将输出发送到 Windows 系统调试器,并使用 Debugger.Log 方法发送到调试器。如果没有附加调试器,则使用 Debugger.Log 发送的消息无效。

如果在基于 Windows 的调试器内操作,“输出”窗口将显示 Debug 和 Trace 消息。但是,如果在调试器外部运行(例如,在测试人员的计算机上),或者要将调试信息保存到基于文本的日志文件中,则必须创建一个新的 Listener 并将它添加到 Listeners 集合中。System.Diagnostic 命名空间提供 EventLogTraceListener 和 TextWriterTraceListener。若要创建文本文件来处理调试消息,则只需下列一行代码即可。

Trace.Listeners.Add(new
TextWriterTraceListener(File.Create("output.txt")));
添加 — 最后,可以添加各种 Trace.Write 方法调用,以在运行时生成调试信息,如下面的代码所示:

Trace.WriteLine("");
Trace.WriteLine("Starting tracing...");
由于输出文件的头几个字节包含有关文件的文本编码的信息,且不可读,您可能需要首先执行空 WriteLine 方法才能开始在新的一行上记录。

要注意的下一件事是对 Trace.Indent 的调用,在默认情况下将输出缩进四个空格:

Trace.Indent();
对 Trace.Unindent 的后续调用将输出调整回左对齐。

此示例程序还使用 Trace 的 WriteLineIf 方法来生成日志记录消息,但只有当某些条件不满足时才这样做。在这种特定的情况下,代码预计第一个数字项将以非零数字开始。如果该测试失败,将显示一则消息,如以下代码行所示。

Trace.WriteLineIf(test == "0", "Oops: Leading zero"); // C#
Trace.WriteLineIf(test = "0", "Oops: Leading zero") ' VB
将所有这些放在一起,执行示例程序将会创建下面的 Output.txt 文件。

Starting Tracing...
InitializeComponent()
Creating controls
Setting up Label and TextBox
Setting up numeric buttons
Setting up operations buttons
Adding Clear and Calculate
Adding to Controls collection
9 Clicked
- Clicked
6 Clicked
Calculate Clicked
Dispose()
Assert 方法以类似的方式操作,只不过输出的形式是详细的错误对话框,且测试失败。对应的 Assert 方法与下面的代码类似。

Trace.Assert(test != "0", "Oops", "Leading zero"); // C#
Trace.Assert(test <> "0", "Oops", "Leading zero") ' Visual Basic .NET
当 Calc.exe 在运行且用户输入前导零时,将产生下面的对话框。



注意 如果程序没有执行完就失败了,将产生一个 0 字节的 Output.txt 文件。


------------------------------------

大家进来聊聊,在实践中用这两个类的好处.
...全文
241 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cowry 2006-04-13
  • 打赏
  • 举报
回复
一般都是用Debug.Assert来声明断言,
这些行为在改成Release版后就不会执行,所以对调试时有不少帮助.
RexZheng 2006-04-13
  • 打赏
  • 举报
回复
自己顶一下
itmingong 2006-04-13
  • 打赏
  • 举报
回复
up
lextm 2006-04-13
  • 打赏
  • 举报
回复
用的不少,不过,基本上使用的是这个文章里面的方法,比较好用一些。

因为生成空文件也很烦人的,用这个方法就不会生成空文件。
-------------------------------------------
注意 如果程序没有执行完就失败了,将产生一个 0 字节的 Output.txt 文件。
lovefootball 2006-04-11
  • 打赏
  • 举报
回复
o
RexZheng 2006-04-11
  • 打赏
  • 举报
回复
沉得太快了吧

-_-!
冷月孤峰 2006-04-11
  • 打赏
  • 举报
回复
没有玩过,顶一下

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧