C#获取堆栈信息,输出文件名、行号、函数名、列号等
命名空间: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
================================================================================================
/****************************************************************** * 创建人: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文件的情况下将始终返回0 if (_filterdName.Contains(_methodName)) continue; _fullName = _methodName + "()->" + _fullName; } st = null; sfs = null; _filterdName = _methodName = null; return _fullName.TrimEnd('-','>'); } }

出处:http://www.cnblogs.com/huangtailang/p/4550177.html
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/6540502.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2017-03-13 00:15 jack_Meng 阅读(14112) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2015-03-13 学习动态性能表(22)V$resource_limit
2015-03-13 学习动态性能表(21)v$lincense
2015-03-13 学习动态性能表(20)--v$waitstat
2015-03-13 学习动态性能表(19)--v$undostat
2015-03-13 学习动态性能表(18)--v$system_event
2015-03-13 学习动态性能表(17)--v$segstat&v$segment_statistics
2015-03-13 学习动态性能表(16)--v$rowcache