.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如何在DotNet中进行栈的跟踪

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

////////////////////////////////////////////////////////////////////////////////
//Author: stardicky                                                           //
//E-mail: [email protected]                                               //
//QQNumber: 9531511                                                           //
//CompanyName: Ezone International                                            //
//Class: HBS-0308                                                             //
//title: 如何在DotNet中进行栈的跟踪                                   //
////////////////////////////////////////////////////////////////////////////////

using System;
using System.Diagnostics;

namespace StackTraceDemo
{
 /// <summary>
 /// EzoneDemo 的摘要说明。
 /// </summary>
 class EzoneDemo
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   
   //获得当前的栈的信息
   EzoneStackTrace.GetCurrentStackInfomation();
   Console.WriteLine("********************************************************************************");
   Console.Write("按任意键继续......");
   Console.Read();


   Function1();


  }

  static void Function1()
  {
   //在方法Function1调用方法Function1_2
   Function1_2();
  }
  static void Function1_2()
  {

   //在方法Function2中获得当前的栈的信息
   EzoneStackTrace.GetCurrentStackInfomation();
   Console.WriteLine("********************************************************************************");
   Console.Write("按任意键继续......");
   Console.Read();

   //在方法Function1_2调用方法Function3
   Function3();
   
  }

  static void Function3()
  {   

   //在方法Function2中获得当前的栈的信息
   EzoneStackTrace.GetCurrentStackInfomation();
   Console.WriteLine("********************************************************************************");
   Console.Write("按任意键继续......");
   Console.Read();
  }
 }

 
 class EzoneStackTrace
 {
  public static void GetCurrentStackInfomation()
  {
   //用构造函数 "1","true" 是因为 "1" 表示屏蔽当前的栈;"true"表示是否生成扩展信息。
   StackTrace MyTrace=new StackTrace(1,true);

   //来制造缩进的效果。
   string Space="";

   for(int i=0;i<MyTrace.FrameCount;i++)
   {
    Console.WriteLine(System.Environment.NewLine);
    Console.WriteLine(Space+"栈名称:"+MyTrace.GetFrame(i).GetMethod());
    Console.WriteLine(Space+"所在行:"+MyTrace.GetFrame(i).GetFileLineNumber());
    //注意这里的列指的是该行的第几个字符,比如说一个制表(tab)字符就算一个字符。
    Console.WriteLine(Space+"所在列:"+MyTrace.GetFrame(i).GetFileColumnNumber());

    Space+="    ";
   }
  }
 }
}


////////////////////////////////////////////////////////////////////////////////
输出结果:


栈名称:Void Main(System.String[])
所在行:20
所在列:4
********************************************************************************

按任意键继续......


栈名称:Void Function1_2()
所在行:40
所在列:4


    栈名称:Void Function1()
    所在行:34
    所在列:3


        栈名称:Void Main(System.String[])
        所在行:28
        所在列:3
********************************************************************************

按任意键继续......

栈名称:Void Function3()
所在行:54
所在列:4


    栈名称:Void Function1_2()
    所在行:47
    所在列:3


        栈名称:Void Function1()
        所在行:34
        所在列:3


            栈名称:Void Main(System.String[])
            所在行:28
            所在列:3
********************************************************************************

按任意键继续......




相关文章

相关软件