首页 > 代码库 > C#使用StackTrace获取方法被谁调用
C#使用StackTrace获取方法被谁调用
在方法中扔进这段
System.Diagnostics.Debug.WriteLine(new string(‘*‘, 78));System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();System.Diagnostics.StackFrame[] sfs = st.GetFrames();for (int u = 0; 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(‘*‘, 78)); System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(); System.Diagnostics.StackFrame[] sfs = st.GetFrames(); for (int u = 1; 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获取方法被谁调用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。