zoukankan      html  css  js  c++  java
  • 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 点击乘坐直达列车

  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/mumuliang/p/3939143.html
Copyright © 2011-2022 走看看