Debug与Trace工具类的应用

在写Console程序的时候,可以使用Console.WriteLine()来时时的输出程序的运行状态和各种参数此刻的信息。但是如果是Windows Form程序,我们要如何实时的观测程序的运行状况呢?可以使用日志文件。但是使用日志文件有一个不足之处,就是日志文件是一个txt文件,不能够向控制台一样能够实时刷新的,这样的方法很不直观。日志文件在部署到服务器上的时候,因为服务器上没有VS,所以是调试程序唯一的选择。但是在本机上开发的时候,可以通过VS的Output窗口实时输出程序的运行状态。

Debug.WriteLine("ddd");这句话就相当于Console.WriteLine("ddd"),只是输出窗口不再是控制台,而是VS.

其实我们发现,还有Trace.Write方法,那么Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?程序编译成dll有两种模式,debug和release,首先我们来看一看两种模式的区别。Debug模式不会优化代码,但是会生成调试信息pdb,这样你在代码中设置断点就能调试了。Release模式下会优化代码,但是不会生成调试信息。Debug模式下生成的程序集为调试版本,未经优化;在bin/debug/目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息;Release模式下不包含调试信息,并对代码进行了优化,/bin/release/目录下只有一个.exe或.dll文件。

在项目文件夹下除了bin外,还有个obj目录。编译是分模块编译的,每个模块的编译结果就保存在了obj目录下。最后会合并为一个exe或者dll文件保存到bin之中。因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj的目录的作用就是保存这些小块的编译结果,加快编译速度。

使用这两个工具类之前一定要在项目属性中,设置一下允许使用这两个类。

Debug类里所提供的函数仅在编译时带#Debug宏参数才奏效,一旦到了Release版本中,这些函数都会被忽略。也就是说Debug类的功能仅在程序员开发的时候能用。而Trace则不同,它能在Release版本的程序中也被运行,这样程序员就可以在Release版本的程序中添加一些Debug类提供的功能了。简单说,就是你的程序要发布了,你想给人家一个优化了的dll和exe,所以你把VS的编译模式设置成了Release,在这种情况下,你还是想在调一调程序,看一看其运行状态。但是如果此时使用Debug.WriteLine()就没有任何反应,因为这个在此模式下是没有作用的。此时你可以使用Trace.WriteLine(),此时是依然能够输出调试信息的。

还记得上边在项目属性中选中的那个define Trace constant选项吗?那个选项的作用是,如果你选中了,那么程序在编译的时候就会把Trace的相关代码编译到dll中,在VS调试的时候可以输出信息,而且部署到服务器上依然可以有用。有人说,服务器上不是没有VS吗?其实Trace类的输出方向是可以重定位的,我们可以使其输出到文本文件或者windows Log记录中。

public class ControlTraceListener : TraceListener
{
	private Control _control;
	private StringSendDelegate _invokeWrite;
	private delegate void StringSendDelegate(string msg);

	public ControlTraceListener(Control target)
	{
		_control = target;
		_invokeWrite = new StringSendDelegate(SendString);
	}
	public override void Write(string message)
	{
 		_control.Invoke(_invokeWrite, new object[] { message });
	}
	public override void WriteLine(string message)
	{
		_control.Invoke(_invokeWrite, new object[] { message + Environment.NewLine });
	}
	private void SendString(string msg)
	{
 		_control.Text += msg;
	}
}

而且TraceListener的应用很多,比如说在Enterprise Logging中,就重写了TraceListener方法。

Debug与Trace工具类的应用,布布扣,bubuko.com

时间: 2024-12-26 14:29:26

Debug与Trace工具类的应用的相关文章

Apache Commons 工具类介绍及简单使用

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. C

apache 工具类

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

Java 基于log4j的日志工具类

Java 基于log4j的日志工具类 对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatform.receiveorder.util; import java.io.PrintWriter; import java.io.StringWriter; import org.apache.log4j.Logger; /** * @Description 日

log4j2和logback动态修改日志级别工具类

工作中,有些场景需要动态修改线上日志记录器的打印日志级别, 本文的两个工具类使用的版本如下: ----------------logback--------------------- <dependency>   <groupId>ch.qos.logback</groupId>   <artifactId>logback-core</artifactId>   <version>1.1.8</version></d

Spring 的优秀工具类盘点第 1 部分

文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来说,JDK 的这些操作类所提供的方法过于底层,直接使用它们进行文件操作不但程序编写复杂而且容易产生错误.相比于 JDK 的 File,Spring 的 Resource 接口(资源概念的描述接口)抽象层面更高且涵盖面更广,Spring 提供了许多方便易用的资源操作工具类,它们大大降低资源操作的复杂度

2015第30周三Spring常用工具类

文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来说,JDK 的这些操作类所提供的方法过于底层,直接使用它们进行文件操作不但程序编写复杂而且容易产生错误.相比于 JDK 的 File,Spring 的 Resource 接口(资源概念的描述接口)抽象层面更高且涵盖面更广,Spring 提供了许多方便易用的资源操作工具类,它们大大降低资源操作的复杂度

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

Bitmap工具类

一直在使用的一个Bitmap工具类 处理Bitmap和ImageView对象,实现了以下功能: 1.saveBitmap: 把Bitmap对象持久存储到SD卡或手机内存. 2.getViewBitmap: 从view得到bitmap对象 3.addWatermark: Bitmap加水印 4.zoomBitmap: 放大缩小图片 5.getLoacalBitmap: 传入路径,从持久存储(SD卡或手机内存)得到Bitmap对象 6.getBitMapByUrl: 通过URL地址获取Bitmap对

使用Resources类搭建Unity简单的资源管理工具类

Unity资源加载的方式有: 1.脚本拖拽(本地) 2.Resources加载(本地) ★ 3.AssetBundle加载(本地,远程[www])★ 本篇将使用Resources类搭建一个简单的资源管理工具类 Resources是Unity下的特殊文件夹,使用需自行创建Resources文件夹(命名必须正确) 使用Resources文件夹就需要用到Resources类的一些方法,如下: Resources类 Load 从Resources文件夹加载单个资源(可指定类型) LoadAll 从Res