命名空间: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提供了一系列系统组件来帮助我们获取项目堆栈信息用于定位和排查,以下代码将返回出错堆栈调用的各上一级方法,直到最终的调用者方法
/******************************************************************* 创建人:HTL* 创建时间:2015-06-03 19:54:49* 说明: 获取出错时的堆栈调用方法列表* Huangyuan413026@163.com*******************************************************************/
using System;public class StackTraceTest
{public static void Main(){m1();}static void m1(){m2();}static void m2(){m3();}static void m3(){ResponseWrite();}static void ResponseWrite(){ResponseWriteError();}static void ResponseWriteError(){//将错误信息写入日志
        Console.WriteLine(GetStackTraceModelName());        }/// <summary>/// @Author:      HTL/// @Email:       Huangyuan413026@163.com/// @DateTime:    2015-06-03 19:54:49/// @Description: 获取当前堆栈的上级调用方法列表,直到最终调用者,只会返回调用的各方法,而不会返回具体的出错行数,可参考:微软真是个十足的混蛋啊!让我们跟踪Exception到行把!(不明真相群众请入) /// </summary>/// <returns></returns>static string GetStackTraceModelName(){//当前堆栈信息System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();System.Diagnostics.StackFrame[] sfs = st.GetFrames();//过虑的方法名称,以下方法将不会出现在返回的方法调用列表中string _filterdName = "ResponseWrite,ResponseWriteError,";string _fullName = string.Empty, _methodName = string.Empty;for (int i = 1; i < sfs.Length; ++i){//非用户代码,系统方法及后面的都是系统调用,不获取用户代码调用结束if (System.Diagnostics.StackFrame.OFFSET_UNKNOWN == sfs[i].GetILOffset()) break;_methodName = sfs[i].GetMethod().Name;//方法名称//sfs[i].GetFileLineNumber();//没有PDB文件的情况下将始终返回0if (_filterdName.Contains(_methodName)) continue;_fullName = _methodName + "()->" + _fullName;}st = null;sfs = null;_filterdName = _methodName = null;return _fullName.TrimEnd('-','>');}
}

执行以上代码效果(跟代码中的调用方法一致):
参考:
在线代码:http://ideone.com/34Q3Sk
博客园:
如何处理Windows Forms程序中未处理的异常 
微软真是个十足的混蛋啊!让我们跟踪Exception到行把!(不明真相群众请入) 
挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim 
浅析StackTrace
MSDN StackTrace 类
来自为知笔记(Wiz)

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

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

转载于:https://www.cnblogs.com/mq0036/p/6540502.html

C#获取堆栈信息,输出文件名、行号、函数名、列号等相关推荐

  1. android qq登录 获取用户信息吗,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

    [PHP] 纯文本查看 复制代码<?php // header header("Content-Type:application/json"); error_reportin ...

  2. 企业微信获取用户信息响应40029(微信小程序与公众号出现类似问题应该是同样的原因)

    企业微信获取用户信息响应40029 在对接企业微信的时候需要通过code去获取userId,但是会返回40029的error码,经过测试与验证原因是访问地址 https://open.weixin.q ...

  3. PHP 数据类型划分(8种)、获取数据(变量)的类型函数、单引号和双引号的字符串区分转义符、定界符、拓展

    首先,我们来看看八种数据类型划分有哪些? 数据类型划分: 基本类型(标量类型): 整数类型:int   integer 浮点数类型:float  double 字符串类型:string 布尔类型:bo ...

  4. mysql获取当前时间_MYSQL proxysql 在深入 信息获取和信息输出

    ProxySQL 前两期针对不同的MYSQL高可用的方式来说的, 本期会更加深入到PROXYSQL 的一些本身的东西. 在PROXYSQL 中有一个表,存储了所有的global variables, ...

  5. linux替换指定行指定列的内容,linux – sed替换特定行号的特定列号值

    这是一种方式: $sed '/^username4/{s/ [^ ]*/ anything/3}' file username1 20130310 enabled 20130310 enabled u ...

  6. python 打印当前行号_python中获取当前位置所在的行号和函数名(转)

    http://www.vimer.cn/2010/12/%E5%9C%A8python%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E4%BD%8D%E7 ...

  7. 获取java异常堆栈信息_Java 实例 - 获取异常的堆栈信息

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

  8. 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)

    之前写过一篇微信公众号开发–自定义菜单跳转页面并获取用户信息 由于当时是刚学习微信公众号开发当时的思路虽然可行,不过不是最好的,最近也用到了需要获取用户信息的地方,再次整理一下. 流程 注意点 ### ...

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

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

  10. python中traceback获取异常信息

    在日常工作中,我们常常会碰到异常,我们想在异常发生的时候,不但能显示异常发生的位置,还能看到异常方法被调用的堆栈信息,在python中怎么实现呢? 实际上python提供了一个traceback来实现 ...

最新文章

  1. LeetCode刷题记录14——257. Binary Tree Paths(easy)
  2. Angular应用提高打包速度
  3. Netmeeting的四个端口
  4. CSP认证201612-3 权限查询[C++题解]:模拟题、结构体、set、有点复杂
  5. python中函数的参数
  6. 2021年中国一次性弹性泵市场趋势报告、技术动态创新及2027年市场预测
  7. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)...
  8. java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解
  9. Extjs4.1.1视频教程下载
  10. 数字图像处理与机器视觉,机器视觉算法与应用 pdf电子版
  11. Dynamic 365 中创建编码规则
  12. mac 环境变量 配置
  13. (转)中国IT界名人
  14. Linux 系统编程-文件IO-文件描述符、open函数的使用、实现touch命令
  15. Catagory分类
  16. Second season seventh episode,Ross finds out Rachel like him,what will he do???
  17. 社群空间站一键发布微信群精品优质社群的搜索和发布平台源码
  18. SSL/TLS安全:Schannel中WinShock漏洞及解决办法
  19. Java代码测试大端小端
  20. Oracle同步数据到MySQL

热门文章

  1. 总线接口与计算机通信(三)UART起止式异步通用串行数据总线
  2. 70道经典Android面试题加答案--重要知识点几乎都涉及到了
  3. flex 内嵌js文件
  4. 联合主键使用in和not in
  5. idea license 20200104
  6. 突发!Spring疑似沦陷了。。。
  7. 阿里开源的限流神器 Sentinel,轻松搞定接口限流!
  8. 常用Maven插件终极大全,速度收藏!
  9. MySQL:Left Join 这个坑,千万别踩!
  10. 阿里巴巴微服务技术实践