zoukankan      html  css  js  c++  java
  • Debug与Trace的区别


    一.首先要明白Debug与Trace的区别:


     

    1. Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?

    Debug类提供一组帮助调试代码的方法和属性。Trace类提供一组帮助跟踪代码执行的方法和属性,通俗的说就是为在不打断程序的调试或跟踪下,用来记录程序执行的过程。

    Debug只在debug状态下会输出,Trace在Release下也会输出,在Release下Debug的内容会消失。

    2. Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。

    首先以一个表格说明问题:

    项目
     Debug
     Release
     
    条件编译常数
     Debug;Trace
     Trace
     
    优化代码
     False
     True
     
    输出路径
     bin\Debug
     bin\Release
     
    生成调试信息
     True
     False
     


    Debug模式下生成的程序集为调试版本,未经优化;在bin\debug\目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息;Release模式下不包含调试信息,并对代码进行了优化,\bin\release\目录下只有一个.exe或.dll文件。在项目文件夹下除了bin外,还有个obj目录。编译是分模块编译的,每个模块的编译结果就保存在了obj目录下。最后会合并为一个exe或者dll文件保存到bin之中。因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj的目录的作用就是保存这些小块的编译结果,加快编译速度。

    二.Trace and Bug Sample

    using System;

    using System.Diagnostics; //引入Debug类所在命名空间

    namespace traceanddebug

    {

        class TestDebug

        {

            public static void TestDebugMethod()

            {

                Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));

                //将Debug类输出定向到控制台输出

                Debug.AutoFlush = true;

                //设置Debug为自动输出,即每次写入后都调用Listeners上调用Flush

                Debug.Indent();

                //设置缩进

                Debug.WriteLine("Debug WriteLine()");

                //用Debug输出"Debug WriteLine()"

                Console.WriteLine("Console.WriteLine()");

                //用Console输出"Console.WriteLine()"

                Debug.Unindent();

                //取消缩进

                //Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

                //将Trace类输出定向到控制台输出

                //Trace.AutoFlush = true;

                //设置Trace为自动输出,即每次写入后都调用Listeners上调用Flush

                Trace.Indent();

                //设置缩进

                Trace.WriteLine("Trace WriteLine()");

                //用Trace输出"Trace WriteLine()"

                Console.WriteLine("Console.WriteLine()");

                //用Console输出"Console.WriteLine()"

                Trace.Unindent();

                //取消缩进

                Console.Read();

            }

        }

        class Program

        {

            static void Main(string[] args)

            {

                TestDebug.TestDebugMethod();

            }

        }

    }

    三.  C#将Trace,Debug信息输出到控件上(转)

     主要实现方法,继承TraceLinster类,重写构造参数,重写Write和WriteLine方法就可以了,具体代码如下:

    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)
    {
    // No need to lock control as this function will only
    // ever be executed from the UI thread
    _control.Text += msg;

    }
    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xufei96/archive/2010/01/13/5186723.aspx

  • 相关阅读:
    报表选型应该知道的
    报表工具——开源还是商用
    地图报表怎么做?
    关于报表在移动端展现需你需要知道哪些?
    报表怎样实现滚动的公告效果?
    加速JDBC的快捷方法
    百万级分组大报表开发与呈现
    秒级展现的百万级大清单报表怎么做
    润乾集算器技术文档汇总
    报表使用相关知识及技巧汇总
  • 原文地址:https://www.cnblogs.com/ghfsusan/p/1705508.html
Copyright © 2011-2022 走看看