Obtain valores de parâmetro de um quadro de pilha no .NE

Gostaria de obter todos os valores de parâmetro do quadro de pilha no .NET. Um pouco como você pode ver os valores na pilha de chamadas no depurador do Visual Studio. Minha abordagem concentrou-se no uso doStackFrame class e depois refletir sobre um ParameterInfo array. Eu tive sucesso com reflexão e propriedades, mas isso está se mostrando um pouco mais complicado.

Existe uma abordagem para conseguir isso?

O código até agora é assim:

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Go(1);
    }
}

public class A
{
    internal void Go(int x)
    {
        B b = new B();
        b.Go(4);
    }
}

public class B
{
    internal void Go(int y)
    {
        Console.WriteLine(GetStackTrace());

    }
    public static string GetStackTrace()
    {
        StringBuilder sb = new StringBuilder();
        StackTrace st = new StackTrace(true);
        StackFrame[] frames = st.GetFrames();

        foreach (StackFrame frame in frames)
        {
            MethodBase method = frame.GetMethod();

            sb.AppendFormat("{0} - {1}",method.DeclaringType, method.Name);
            ParameterInfo[] paramaters = method.GetParameters();
            foreach (ParameterInfo paramater in paramaters)
            {
                sb.AppendFormat("{0}: {1}", paramater.Name, paramater.ToString());
            }
            sb.AppendLine();
        }
        return sb.ToString();
    }
}
A saída é assim:
SfApp.B - GetStackTrace
SfApp.B - Go
y: Int32 y
SfApp.A - Go
x: Int32 x
SfApp.Program - Main
args: System.String[] args
Gostaria que parecesse mais com isso:
SfApp.B - GetStackTrace
SfApp.B - Go
y: 4
SfApp.A - Go
x: 1
SfApp.Program - Main

Apenas por um pouco de contexto, meu plano era tentar usar isso quando eu lançar minhas próprias exceções. Examinarei suas sugestões com mais detalhes e verificarei se é adequad