在使用.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)

C#获取当前堆栈的各调用方法列表相关推荐

  1. java 类名方法_Java学习——根据类名获取方法名,并调用方法

    最近在项目中调用mybatis获取到了实体类对象,但是我们需要从实体类对象中取属性值,所以这里就需要以下几点知识: 1.根据Object对象获取类名 2.根据类对象获取所有的对象方法名 3.根据方法名 ...

  2. window.parent方法获取父页面属性或者调用方法

    父页面: <script type="text/javascript">var serviceType = "服务类型"; </script& ...

  3. 调用实现天气预报功能android,Android编程实现获取新浪天气预报数据的方法

    本文实例讲述了Android编程实现获取新浪天气预报数据的方法.分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.php?ci ...

  4. 通过反射获取及调用方法(Method)

    1.获取方法 使用反射获取某一个类中的方法,步骤: ①找到获取方法所在类的字节码对象 ②找到需要被获取的方法 Class类中常用方法: public Method[] getMethods():获取包 ...

  5. java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作

    我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得 ...

  6. .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)...

    大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以 ...

  7. python调用接口获取数据_python:接口间数据传递与调用方法

    如下所示: import requests import unittest import json from pubulic_way.get_token import getSession class ...

  8. C#获取WebService接口的所有可调用方法[WebMethod]

    C#获取指定的WebService接口的所有可调用方法,将其绑定的树图控件(TreeView)中,我们引用天气WebService服务为例,联网情况下均可用. PS:天气WeatherWebServi ...

  9. 天气api获取24小时逐小时天气预报接口调用方法

    接口返回json格式 返回最近24小时每一个小时的天气情况, 包含当前时间, 天气情况, 温度, 风力风向 返回示例, 长度问题, 只展示部分结果 "hours":[ {" ...

最新文章

  1. 天池NLP大赛来了!
  2. SAP 往一个角色里增加事务代码
  3. IDC运营商如何轻松建立属于自己的数据备份服务中心
  4. 在Tableau中实现表格下钻
  5. 通过AI技术研究网红对其粉丝的消费品牌意识的影响
  6. AngularJS:在Windows上安装Yeoman
  7. kube-controller-manager 配置参数解读
  8. php在html中生成option,使用PHP可以将HTML SELECT/OPTION值设为NULL吗?
  9. mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围
  10. 《GPUPro》笔记
  11. java 蓝桥杯算法训练 数字三角形(题解)
  12. myeclipse 内存不够用报错PermGen space 和 An internal error has occurred.
  13. JAVA中如何创建一个二维数组,然后给二维数组赋值!
  14. 推荐系统实践 - 基于用户行为分析的推荐算法
  15. 架构师原来是这样修炼出来的
  16. mysql 5.6 触发器_【mysql】mysql触发器使用示例
  17. 【学懂数据结构】二叉树之舞之二叉树
  18. 重读经典(CLIP下):《Learning Transferable Visual Models From Natural Language Supervision》
  19. layui省市县三级联动,如何设置select选择时,值为省市县code码
  20. 共轭梯度法确实存在数值精度的要求

热门文章

  1. matlab实现整数规划/01规划
  2. drf 解析器的配置和使用
  3. 从零开始学习Docker
  4. iOS之instancetype
  5. 基础【枚举】-----(枚举)------(转)
  6. weblogic hibernate HqlToken
  7. extjs 日期不显示
  8. 基于json的jquery地区联动
  9. 终于有人把正态分布和二八法则讲明白了
  10. 回顾计算机产业发展的4个阶段:美国企业统治全球市场了吗?