命名空间:System.Diagnostics

得到相关信息:

StackTrace st = new StackTrace(new StackFrame(true));
StackFrame sf = st.GetFrame(0);
Console.WriteLine(" File: {0}", sf.GetFileName());                                                //文件名
Console.WriteLine(" Method: {0}", sf.GetMethod().Name);                                 //函数名
Console.WriteLine(" Line Number: {0}", sf.GetFileLineNumber());                  //文件行号
Console.WriteLine(" Column Number: {0}", sf.GetFileColumnNumber());

写日志,便于调试,查找问题

StackTrace st = new StackTrace(new StackFrame(true));只能获取本次的堆栈信息,可以改用下面的方法获取程序的调用堆栈信息。

StackTrace st = new StackTrace(true); 就可以获取程序的整个堆栈调用关系的列表信息。

使用st.ToString()可以直接获取堆栈列表,是不是很方便啊。

参考:http://blog.csdn.net/zhuxiaowei716/article/details/46337033

================================================================================================

在使用.NET编写的代码在debug时很容易进行排查和定位问题,一旦项目上线并出现问题的话那么只能依靠系统日志来进行问题排查和定位,但当项目复杂时,即各种方法间相互调用将导致要获取具体的出错方法或调用者将是一件不那么容易的事(因为没有PDB文件)
还好.NET提供了一系列系统组件来帮助我们获取项目堆栈信息用于定位和排查,以下代码将返回出错堆栈调用的各上一级方法,直到最终的调用者方法
  1. /******************************************************************
  2. * 创建人:HTL
  3. * 创建时间:2015-06-03 19:54:49
  4. * 说明: 获取出错时的堆栈调用方法列表
  5. * Huangyuan413026@163.com
  6. *******************************************************************/
  7. using System;
  8.  
  9. public class StackTraceTest
  10. {
  11. public static void Main()
  12. {
  13. m1();
  14. }
  15. static void m1(){
  16. m2();
  17. }
  18.  
  19. static void m2(){
  20. m3();
  21. }
  22.  
  23. static void m3(){
  24. ResponseWrite();
  25. }
  26. static void ResponseWrite(){
  27. ResponseWriteError();
  28. }
  29. static void ResponseWriteError(){
  30. //将错误信息写入日志
  31. Console.WriteLine(GetStackTraceModelName());
  32. }
  33. /// <summary>
  34. /// @Author: HTL
  35. /// @Email: Huangyuan413026@163.com
  36. /// @DateTime: 2015-06-03 19:54:49
  37. /// @Description: 获取当前堆栈的上级调用方法列表,直到最终调用者,只会返回调用的各方法,而不会返回具体的出错行数,可参考:微软真是个十足的混蛋啊!让我们跟踪Exception到行把!(不明真相群众请入)
  38. /// </summary>
  39. /// <returns></returns>
  40. static string GetStackTraceModelName()
  41. {
  42. //当前堆栈信息
  43. System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
  44. System.Diagnostics.StackFrame[] sfs = st.GetFrames();
  45. //过虑的方法名称,以下方法将不会出现在返回的方法调用列表中
  46. string _filterdName = "ResponseWrite,ResponseWriteError,";
  47. string _fullName = string.Empty, _methodName = string.Empty;
  48. for (int i = ; i < sfs.Length; ++i)
  49. {
  50. //非用户代码,系统方法及后面的都是系统调用,不获取用户代码调用结束
  51. if (System.Diagnostics.StackFrame.OFFSET_UNKNOWN == sfs[i].GetILOffset()) break;
  52. _methodName = sfs[i].GetMethod().Name;//方法名称
  53. //sfs[i].GetFileLineNumber();//没有PDB文件的情况下将始终返回0
  54. if (_filterdName.Contains(_methodName)) continue;
  55. _fullName = _methodName + "()->" + _fullName;
  56. }
  57. st = null;
  58. sfs = null;
  59. _filterdName = _methodName = null;
  60. return _fullName.TrimEnd('-','>');
  61. }
  62. }
 
执行以上代码效果(跟代码中的调用方法一致):
 
 
参考:
 
博客园:
 
 

使用StackTrace堆栈跟踪记录详细日志(可获取行号)

出处:http://www.cnblogs.com/huangtailang/p/4550177.html

C#获取堆栈信息,输出文件名、行号、函数名、列号等的更多相关文章

  1. [原创] [C#] 转换Excel数字列号为字母列号

    转换Excel数字列号为字母列号 例如: 0 -> A 26 -> AA private static string GetColumnChar(int col) { ; ; ) ) + ...

  2. openpyxl 实现excel字母列号与数字列号之间的转换

    https://www.cnblogs.com/apple2016/p/9686433.html

  3. NSLog 输出文件名、方法名、行号

    项目中经常会需要根据日志输出来寻找源代码,通过以下方法可以让它自动输出文件名.方法.行号,非常方便. 找到项目的pch文件,添加以下内容即可: ...为三个英文句号(复制粘贴后可能会变化). /** ...

  4. 在Linux与Windows上获取当前堆栈信息

    在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息.常用在日志输出,错误报告,异常检测. 在Linux有比较简便的函数获取堆栈信息: #include <stdi ...

  5. Java异常---获取异常的堆栈信息

    Java 实例 - 获取异常的堆栈信息  Java 实例 以下实例演示了使用异常类的 printStack() 方法来获取堆栈信息: Main.java 文件 public class Main{ p ...

  6. Android 获取地理位置信息 封装好了 直接用

    前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...

  7. 小程序wx.getUserInfo获取用户信息方案介绍

    问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本 API和组件 - -   - -     背景 小程序一个比较重要的能力就是获取用户信息,也就是使用 wx.g ...

  8. Linux获取网络接口信息

    linux获取网络接口信息需要用到的函数为ioctl(),结构体struct ifreq,struct ifconf 1.ioctl()函数原型及作用 #include <sys/ioctl.h ...

  9. php 获取header信息

    nginx服务器获取header信息: 如:获取token: $_SERVER['HTTP_TOKEN']; 获取自定义的参数采用$_SERVER['参数名'] Apache服务器获取header信息 ...

随机推荐

  1. Linux常用指令——周琛

    ps ax | grep java 查看进程命令里带“java”字样的进程信息,第一列是进程号 kill -9 1234 强制杀死1234号进程 cd /xxx/xxx 进入/xxx/xxx目录 cd ...

  2. layer满屏/禁止最大化最小化 可以做选择框使用

    1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...

  3. Linux下SPI测试程序

    /** 说明:SPI通讯实现* 方式一: 同时发送与接收实现函数: SPI_Transfer()* 方式二:发送与接收分开来实现* SPI_Write() 只发送* SPI_Read() 只接收* 两 ...

  4. Android源码目录分析【转】

    本文转载自:http://blog.csdn.net/backgarden_straw/article/details/8050783 在学习Android的过程中,学习写应用还好,一开始不用管太多代 ...

  5. springboot - web项目

    一:使用Thymeleaf:参考http://blog.csdn.net/u012702547/article/details/53784992#t0 1.1 引入相应的包 1.2  thymelea ...

  6. NOI2013

    Bless All 其实已经没有什么遗憾了呢 下一篇就是OI 再见吧2333

  7. QT (QSS) 编程, QSS语法概述。。setstylesheet

    http://www.cnblogs.com/davesla/archive/2011/01/30/1947928.html 转载] QT皮肤(QSS)编程 借用css 的灵感, Qt也支持Qt自己的 ...

  8. jQuery ajax 标准写法及进度条绘制

    jQuery ajax 标准写法及进度条绘制 $.ajax({ url: "http://www.microsoft.com", //请求的url地址 dataType: &quo ...

  9. 子矩阵(暴搜(全排列)+DP)

    子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一 ...

  10. Redis学习路线

    [http://www.cnblogs.com/zhenjing/archive/2012/11/15/redis_research.html] Redis: A persistent key-val ...