本文介绍如何使用 debug 和 trace 类。microsoft .net framework 中提供了这两个类。在应用程序开发期间或部署到产品后,可以使用这两个类提供有关应用程序性能的信息。这两个类只是 .net framework 中所提供配置功能的一部分。
要求下面的列表概括了推荐的硬件、软件、网络结构以及所需的 service pack:
• microsoft windows 2000 或 microsoft windows xp
• microsoft visual c# .net
本文还假定您熟悉程序调试。
方法说明
在使用 debug 类创建一个示例一节中介绍的步骤演示了如何创建使用 debug 类以提供有关程序执行信息的控制台应用程序。
当程序运行时,您可以使用 debug 类的方法来生成消息,以帮助您监视程序执行顺序、检测故障或提供性能度量信息。默认情况下,debug 类产生的消息显示在 visual studio 集成开发环境 (ide) 的“输出”窗口中。
该代码示例使用 writeline 方法生成后面带有行结束符的消息。当您使用此方法生成消息时,每条消息在“输出”窗口中均显示为单独的一行。
如果使用 debug 类的 assert 方法,那么只有在指定条件计算为 false 时,“输出”窗口才显示消息。该消息还在一个模式对话框中向用户显示。该对话框包括消息、项目名和 debug.assert 语句编号。该对话框还包括下列三个命令按钮:
• 终止:应用程序停止运行。
• 重试:应用程序进入调试模式。
• 忽略:应用程序继续。
用户必须先单击这些按钮中的一个,然后应用程序才可以继续。
您还可以指示从 debug 类向“输出”窗口以外的目标进行输出。debug 类有一个名为 listeners 的集合,该集合包括一些 listener 对象。
每个 listener 对象都监视 debug 输出并使输出指向指定的目标。
listener 集合中的每个 listener 都接收 debug 类生成的任何输出。请使用 textwritertracelistener 类定义 listener 对象。可以通过 textwritertracelistener 类的构造函数为该类指定目标。
一些可能的输出目标包括: • 使用 system.console.out 属性指定“控制台”窗口作为输出目标。
• 使用 system.io.file.createtext("filename.txt") 语句指定文本文件 (.txt) 作为输出目标。
创建 textwritertracelistener 对象后,必须将该对象添加到 debug.listeners 集合才可接收调试输出。
使用 debug 类创建一个示例1. 启动 visual studio .net。
2. 新建一个名为 coninfo 的新 visual c# .net 控制台应用程序项目。将创建 class1。
3. 在 class1 的顶部添加以下名称空间。
using system.diagnostics;
4. 要初始化变量以使其包含产品的相关信息,请将下面的声明语句添加到 main 方法:
string sprodname = "widget";
int iunitqty = 100;
double dunitcost = 1.03;
5. 将类生成的消息指定为 writeline 方法的第一个输入参数。按 ctrl+alt+o 组合键以确保“输出”窗口可见。
debug.writeline("debug information-product starting ");
6. 为了清晰易读,请使用 indent 方法在“输出”窗口中缩进后面的消息:
debug.indent();
7. 要显示所选变量的内容,请使用 writeline 方法,如下所示:
debug.writeline("the product name is " + sprodname);
debug.writeline("the available units on hand are" + iunitqty.tostring());
debug.writeline("the per unit cost is " + dunitcost.tostring());
8. 您还可以使用 writeline 方法显示现有对象的名称空间和类名称。例如,下面的代码在“输出”窗口中显示 system.xml.xmldocument 命名空间:
system.xml.xmldocument oxml = new system.xml.xmldocument();
debug.writeline(oxml);
9. 要整理输出,可以包括一个类别作为 writeline 方法的第二个可选的输入参数。如果您指定一个类别,则“输出”窗口消息的格式为“类别:消息”。例如,以下代码的第一行在“输出”窗口中显示“field:the product name is widget”:
debug.writeline("the product name is " + sprodname,"field");
debug.writeline("the units on hand are" + iunitqty,"field");
debug.writeline("the per unit cost is" + dunitcost.tostring(),"field");
debug.writeline("total cost is " + (iunitqty * dunitcost),"calc");
10. 仅在使用 debug 类的 writelineif 方法将指定条件计算为 true 时,“输出”窗口才可以显示消息。将要计算的条件是 writelineif 方法的第一个输入参数。writelineif 的第二个参数是仅在第一个参数的条件计算为真时才显示的消息。
debug.writelineif(iunitqty > 50, "this message will appear");
debug.writelineif(iunitqty < 50, "this message will not appear");
11. 使用 debug 类的 assert 方法,使“输出”窗口仅在指定条件计算为 false 时才显示消息:
debug.assert(dunitcost > 1, "message will not appear");
debug.assert(dunitcost < 1, "message will appear since dunitcost < 1 is false");
12. 为“控制台”窗口 (tr1) 和名为 output.txt (tr2) 的文本文件创建 textwritertracelistener 对象,然后将每个对象添加到 debug listeners 集合中:
textwritertracelistener tr1 = new textwritertracelistener(system.console.out);
debug.listeners.add(tr1);
textwritertracelistener tr2 = new textwritertracelistener(system.io.file.createtext("output.txt"));
debug.listeners.add(tr2);
13. 为了清晰易读,请使用 unindent 方法去除 debug 类为后续消息生成的缩进。当您将 indent 和 unindent 两种方法一起使用时,读取器可以将输出分成组。
debug.unindent();
debug.writeline("debug information-product ending");
14. 为了确保每个 listener 对象收到它的所有输出,请为 debug 类缓冲区调用 flush 方法:
debug.flush();
使用 trace 类 您还可以使用 trace 类生成监视应用程序执行的消息。trace 和 debug 类共享大多数相同的方法来生成输出,这些方法包括: • writeline
• writelineif
• indent
• unindent
• assert
• flush
您可以在同一应用程序中分别或同时使用 trace 和 debug 类。在一个“调试解决方案配置”项目中,trace 和 debug 两种输出均为活动状态。该项目从这两个类为 listener 对象生成输出。但是,“发布解决方案配置”项目仅从 trace 类生成输出。该“发布解决方案配置”项目忽略任何 debug 类方法调用。
新闻热点
疑难解答