在方法中扔进这段

System.Diagnostics.Debug.WriteLine(new string('*', ));
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
System.Diagnostics.StackFrame[] sfs = st.GetFrames();
for (int u = ; u < sfs.Length; ++u)
{
System.Reflection.MethodBase mb = sfs[u].GetMethod();
System.Diagnostics.Debug.WriteLine("[CALL STACK][{0}]: {1}.{2}", u, mb.DeclaringType.FullName, mb.Name);
}

然后就能在output窗口(Alt+2)看到类似

******************************************************************************
[CALL STACK][0]: WindowsFormsApplication1.Form1.button1_Click
[CALL STACK][1]: System.Windows.Forms.Button.OnMouseUp
[CALL STACK][2]: System.Windows.Forms.Control.WmMouseUp
[CALL STACK][3]: System.Windows.Forms.Control.WndProc
[CALL STACK][4]: System.Windows.Forms.ButtonBase.WndProc
[CALL STACK][5]: System.Windows.Forms.Button.WndProc
[CALL STACK][6]: System.Windows.Forms.NativeWindow.DebuggableCallback
[CALL STACK][7]: System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW
[CALL STACK][8]: System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW
[CALL STACK][9]: System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop
[CALL STACK][10]: System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner
[CALL STACK][11]: System.Windows.Forms.Application+ThreadContext.RunMessageLoop
[CALL STACK][12]: WindowsFormsApplication1.Program.Main
[CALL STACK][13]: System.AppDomain._nExecuteAssembly
[CALL STACK][14]: Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly
[CALL STACK][15]: System.Threading.ExecutionContext.RunInternal
[CALL STACK][16]: System.Threading.ExecutionContext.Run
[CALL STACK][17]: System.Threading.ExecutionContext.Run
[CALL STACK][18]: System.Threading.ThreadHelper.ThreadStart

再高(dan)级(teng)一点 ,写个公用的静态方法,并用上“DEBUG”条件之,然后……在需要的地方调用之

[System.Diagnostics.Conditional("DEBUG")]
static public void OutputCallStack()
{
System.Diagnostics.Debug.WriteLine(new string('*', ));
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
System.Diagnostics.StackFrame[] sfs = st.GetFrames();
for (int u = ; u < sfs.Length; ++u)
{
System.Reflection.MethodBase mb = sfs[u].GetMethod();
System.Diagnostics.Debug.WriteLine("[CALL STACK][{0}]: {1}.{2}", u, mb.DeclaringType.FullName, mb.Name);
}
}

思考题:能否利用扩展方法扩展到Debug命名空间下呢?

另:西加加得到调用堆栈的东东都在execinfo.h 点击乘坐直达列车

C#使用StackTrace获取方法被谁调用的更多相关文章

  1. .NET使用StackTrace获取方法调用者信息

    前言 在日常工作中,偶尔需要调查一些诡异的问题,而业务代码经过长时间的演化,很可能已经变得错综复杂,流程.分支众多,如果能在关键方法的日志里添加上调用者的信息,将对定位问题非常有帮助. 介绍 Stac ...

  2. 【转】StackTraceElement获取方法调用栈的信息

    本文链接:https://blog.csdn.net/hp910315/article/details/52702199 一.什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法 ...

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

    原文链接:https://blog.walterlv.com/post/dotnet-high-performance-reflection-suggestions.html ***** 大家都说反射 ...

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

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

  5. java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))

    1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...

  6. Spring中@Async注解实现“方法”的异步调用

    原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...

  7. 一个 C# 获取高精度时间类(调用API QueryP*)

    如果你觉得用 DotNet 自带的 DateTime 获取的时间精度不够,解决的方法是通过调用 QueryPerformanceFrequency 和 QueryPerformanceCounter这 ...

  8. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...

  9. js调用.net后台事件,和后台调用前台等方法以及js调用服务器控件的方法

    http://blog.csdn.net/deepwishly/article/details/6670942  ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法) 1. javaS ...

随机推荐

  1. JS第一天基础总结

    今天开始学习javascript 主要讲理论上的东西,例如,什么是脚本语言,什么是变量,什么是DOM,什么是BOM等. 脚本语言,实质上可以理解为我们编写的剧本,浏览器按照我们编写的剧本一步一步完成剧 ...

  2. 构造一个简单的Linux系统MenuOS

    陈智威20135125 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验指导 ...

  3. 自增序号,而且默认变量就是$i,也就是说在你的volist标签之内,可以直接使用$i

    <volist name="vlist" id="v"> <{$i}> // 直接使用$i </volist>

  4. Apriori——python3实现

    最近看了关联算法中的Apriori没看懂,这次看了一些论文总算看懂了,不过还是没能够自己实现.在github搜到一些代码看,看的不很懂,这里先贴上(当中有自己加的注释),有时间再补充研究. # -*- ...

  5. JAVA(1)

    java开发第一步就是学习相关知识,打牢基础是关键,下面就和小编我一起从java基础学起吧,一起加油! java方向主要包括三大块: java se 桌面开发 java ee web开发 java m ...

  6. 黑马----JAVA泛型基础

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA范型-基础 一.泛型的概念 1.实现了参数化类型 2.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...

  7. 使用AdvinceInstaller把exe或者msi重新包装成为msi静默安装程序

    最近在学习installShelled打包.net做的软件,其中mysql数据库的静默安装脚本不会写,本人新手勿喷.在不会写脚本的方式下,偶然间看见了这个AdvinceInstaller可以吧.exe ...

  8. 关于asp.net的一点小问题有谁帮忙解答一下?

    public IList<Category> Categories { get; set; }        protected void Page_Load(object sender, ...

  9. Unity3D-ScrollRect 各参数的代码引用以及作用

    版本Unity4.6: 以下为ScrollRect面板上各选项 对应 在代码里的属性: content(RectTransform): scrollRect的RectTransform组件,即滑动面板 ...

  10. 判断App运行是否在前台

    转自:http://notes.stay4it.com/2016/02/26/check-if-app-is-running-forground/ 在一些场景中,经常会需要判断App是否在后台运行,比 ...