Dot Net的调试 - 2

Fail方法不能阻止应用程序运行,他们仅仅输出错误信息。Write和WriteLine方法写入一个消息。他们不同之处仅仅在于后者输出执行后再输出一行。最后,Flush方法刷新缓存。Flush方法对跟踪信息输出的设备有作用(例如,流)。你可以使用自动刷新—每个信息后都自动刷新侦听者。可以在配置文件里面配置:

<configuration>

<stream.diagnostics>

<trace autoflush = “false” />

</stream.diagnostics>

</configuration>

正如你看到的,如果你创建自己的倾听者,需要至少实现write(string)和writeline(string)方法(这些方法是抽象方法)。

微软提供三种跟踪侦听者:DefaultTraceListener,EventLogTraceListener和TextWriteTraceLister.。第一个侦听者有缺省的方法(如果应用程序在命令行的环境下运行,那么输出信息到控制台。如果应用程序在调试情况下,输出到窗口)。第二个侦听者输出信息到指定事件日志中(基于nt技术—winnt,2k,xp或者.net)。第三个倾听者输出文本到流中。

活动倾听者列表可以在编程中设置或者在配置文件中。缺省包括DefaultTraceListener.

编程改变活动倾听者列表,要管理倾听者集合(通过添加和删除方法)。配置文件中管理倾听者,你要用下边的语法:

<configuration>

<system.diagnostics>

<trace autoflust=”false” indentsize = 4>

<listeners>

<add name=”myListener” type=”System.Dianostics.TextWriterTraceListener, system”

initializeData = “c:\MyListener.log”/>

<remove type = “System.Diagnostics.DefaultTraceListener,System”/>

</listeners>

</trace>

</system.dianostics>

</configuration>

InitializeDat参数是传递到构造器的的字符串参数(指定EventLogTraceListener侦听者事件日志)。

侦听者很熟悉创建应用程序使用侦听者输出跟踪信息。代码很简单:

//Trace listeners demo

//

//purpose:To demonstrate how to use listeners

using System;

using System.Diagnostics;

namespace Assertion

{

class Application

{

[STAThread]

static void Main(string[] args)

{

Trace.WriteLine(“Calling WriteLine method”, “Trace Listeners demo”);

Trace.Flush();

}

}

}

这些代码还不够,我们必须创建一个配置文件来设置侦听者:

<configuration>

<system.diagnostics>

<trace autoflush="false" indentsize="4">

<listeners>

<remove type="System.Diagnostics.DefaultTraceListener"/>

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener"

initializeData="myListener.log" />

<add name="myListenerEventLog" type="System.Diagnostics.EventLogTraceListener"

initializeData="Application" />

</listeners>

</trace>

</system.diagnostics>

</configuration>

这个配置文件删除了缺省侦听者加入两个自定义侦听者:第一个输出信息到文本文件,第二个输出到事件日志中。对于第一个侦听者initializeData属性指定输出数据的文件,第二侦听者记录事件到事件日志。

运行程序。检查第一个侦听者,可以看到myListener.log文件,它包含以下信息:Tracing listeners Demo:Calling WriteLine Method

第一个侦听者把信息写入文本文件中。察看第二个。打开微软控制台在事件视图中浏览应用程序事件日志(这个就是我们在配置文件中指定的)。在这里可以看到我们应用程序的事件信息。更多的可能,在这个列表最上边。如果你双击,可以看到其中的内容。我们发现如下信息:

是输出信息更加容易阅读:

有时候应用程序很复杂,为了容易理解可以格式化跟踪信息。使输出信息更加漂亮,可以使用缩排,看下面的简单代码:

public void Callee()

{

Trace.WrteLine(“Callee started”);

……//Some internal logic

Trace.WriteLine(“Initializing Buffer”);

……//Some extra internal login

Trace.WriteLine(“Exiting Callee”);

}

public void Caller()

{

Trace.Write(“Caller Called”);

…..//Some external logic

Callee();

…..//Some extral Logic

Trace.WriteLine(“Initializing Buffer”);

Trace.Write(“Exiting Caller”);

}

输出信息如下:

Caller called

Callee stared

Initializing buffer

Exiting Callee

Initializing buffer

Exiting Caller

如果方法执行前后没有显示信息,我们将被这些拷贝的初始化缓存信息所迷惑。除了信息显示不清楚。为了避免不明确,我们使用Trace类支持的缩进功能。修改的代码,使用缩进:

public void Callee()

{

Trace.indent();

Trace.WriteLine(“Callee started”);

…..//some internal logic

Trace.WriteLine(“Initializing Buffer”);

….//Some extra internal logic

Trace.WriteLine(“Exiting Callee”);

Trace.Unindent();

}

public void Caller()

{

Trace.Write(“Caller called”);

….//Some External Logic

Callee();

….//Some Extra Login

Trace.WriteLine(“Initiallizing buffer”);

Trace.Write(“Exiting Caller”);

}

输出信息如下:

Caller called

Callee started

Initializing buffer

Exiting Callee

Initializing buffer

Exiting Caller

正如你看到的,callee方法输出缩进,很容易分开不同方法的信息。可以调用Indent和Unident方法,达到分离信息的目的。

在配置文件中修改跟踪配置:

<configuration>

<system.diagnostics>

<trace indentsize = “3” / >

</system.diagnostics>

</configuration>

时间: 2024-12-01 23:41:25

Dot Net的调试 - 2的相关文章

Dot Net的调试 - 3

调试 实际上调试和跟踪用得很普遍.Debug类中的方法有相同的名字的方法,这些方法实现了调试的功能.不同之处是在发布版本配置中是禁止使用的(这意味着不能产生二进制代码调用这些代码).调试输出也可以在配置文件设置,请看下面: <confuration> <system.diagnostics> <debug autoflush = "true" indentsize = "7" / > </system.diagnostics

Dot Net的调试 - 1

Debug是整个软件开发过程中最痛苦的部分之一.我们不想说发现一个小bug是多么的困难-你可能已经都知道.软件中bug的数量是随着软件的复杂程度和经常没有及时修正bug而增长的.这些bug和软件的负责程度互相影响,使工程变得更加复杂.所以我们不断的监控和修改bug. 最好的办法是执行单元测试的时候来修正bug,当软件出现问题的时候,软件不会告诉我们哪里出现错误,为什么出现错误,我们的任务就是跟踪进程去解决他们. 这篇文章我们就是想告诉你怎样利用DotNet FrameWork来调试和跟踪让这个处

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 关于

《Redis官方文档》Redis调试指南

原文链接      译者:Adeline Redis开发过程中十分注重其稳定性:我们尽一切努力来保证每一个版本的稳定,不出现突然崩溃等情况.但是即使在我们百分百的努力下,仍然没办法保证百分百的无bug. Redis出现崩溃时,会生成一个详细的报告来描述当时的情景,但是有时候只看报告还不够,而且Redis的核心开发团队可能也没办法独立重现你出现崩溃时候的场景:在这种情况下,我们需要用户能够重现这个情景来帮助我们. 这个指南讲解了如何使用GDB来获得Redis开发者可能用到的信息. GDB是什么?

在Linux下调试Python代码的各种方法_python

 这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的话,你可以从日志中找出问题从而节省大量的时间. 如果你曾经用print语句来调试代码现在停下吧,用logging.debug替代,开始可以慢慢来,以后完全禁用它... 追踪有时看到程序如何被执行会很有帮助.你可以使用IDE的调试共轭ngn一步一步的运行程序,但你需要知道你要找的是什么,否则这将会是

javascript中doT,juicer,artTemplate模板引擎分析与对比

再可以将前后端代码分离,岗位清晰,使后台程序人员可更好的去完成逻辑运算,而前端人员岗位更加专精.统一. js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTemplate等),如何从这么多纷繁的模板引擎中选择一款适合自己的呢,笔者最近对主流的js模板引擎(mustache,doT,juicer,artTemplate,baiduTemplate,Han

php异步调试和线上调试网站程序

  下面分享一种方法同时满足这两种条件,既方便网站程序错误调试,又不影响网站的正常运行的调试方法.将下面的php语句复制到公共代码顶部即可.  代码如下   //ini_set('error_reporting',E_ALL ^ E_NOTICE);//显示所有除了notice类型的错误信息 ini_set('error_reporting',E_ALL);//显示所有错误信息 ini_set('display_errors',off);//禁止将错误信息输出到输出端 ini_set('log_

adb-ubuntu真机调试,最后List of devices attached 下什么也没显示

问题描述 ubuntu真机调试,最后List of devices attached 下什么也没显示 按照网上教程ubuntu真机调试,最后List of devices attached 下什么也没显示 $sudo vim /etc/udev/rules.d/51-android.rules 加入以下内容: SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0cac",M

vs2008-VS搭配QT,x64平台下为挖三维编的dll,怎么调试

问题描述 VS搭配QT,x64平台下为挖三维编的dll,怎么调试 VS搭配QT,x64平台下为挖三维编的dll,怎么调试?新手,试过用挖三维打开调试,但是没看到界面在哪里,请懂得QT的前辈回答,谢谢! 解决方案 https://github.com/Vaa3D/Vaa3D_Wiki/wiki/Build-Vaa3D-on-Linux