C#
using System;
using System.Diagnostics;
namespace StackPrint
{
    class Program
    {
        static void Main(string[] args)
        {
            SingleFunc();
            Console.ReadKey();
        }
        private static void SingleFunc()
        {
            SmallFunc();
        }
        static void SmallFunc()
        {
            //取得Stack物件
            // true means get line numbers.
            StackTrace st = new StackTrace(true); 
            //宣告stack 成員
            StackFrame f ;
            //0 :目前method, 1:取得前一個呼叫method
            f=st.GetFrames()[1];
            Console.Write(f);
            //PrintAllStack();
        }
        //顯示stack所有內容
        static void PrintStack()
        {
            // true means get line numbers.
            StackTrace st = new StackTrace(true);
            foreach (StackFrame f in st.GetFrames())
            {
                Console.Write(f);
            }
        }
    }
VB
Imports System
Imports System.Diagnostics
Module Module1
    Sub Main()
        SingleFunc()
        Console.ReadKey()
    End Sub
    Sub SingleFunc()
        SmallFunc()
    End Sub
    Sub SmallFunc()
        '取得Stack物件
        ' true means get line numbers.
        Dim st As StackTrace = New StackTrace(True)
        '宣告stack 成員
        Dim f As StackFrame
        '0 :目前method, 1:取得前一個呼叫method
        f = st.GetFrames()(1)
        Console.Write(f)
        'PrintAllStack()
    End Sub
    '顯示stack所有內容
    Sub PrintStack()
        ' true means get line numbers.
        Dim st As StackTrace = New StackTrace(True)
        Dim f As StackFrame
        For Each f In st.GetFrames()
            Console.Write(f)
        Next
    End Sub
End Module
上一呼叫method
StackTrace所有內容
另外也可以利用呼叫端資訊
呼叫端資訊 (C# 和 Visual Basic)
using System.Runtime.CompilerServices
using System.Diagnostics;
public void DoProcessing()
{
    TraceMessage("Something happened.");
}
public void TraceMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
{
    Trace.WriteLine("message: " + message);
    Trace.WriteLine("member name: " + memberName);
    Trace.WriteLine("source file path: " + sourceFilePath);
    Trace.WriteLine("source line number: " + sourceLineNumber);
}
沒有留言:
張貼留言