es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener los valores de los parámetros en el marco de la pila en c#?

Quiero obtener los valores de los parámetros en los Stack Frames obtenidos con la clase Stack Trace en c#.

¿Alguien puede proporcionar alguna orientación?

Estoy realizando una codificación experimental.
Quiero saber qué y cómo pasé mientras llegaba al lugar que encontré (nivel de llamada).
Pero no quiero crear un mecanismo especial para ello. En realidad, el stack tiene todo lo que necesito.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar la clase StackTrace en C# para obtener información sobre la pila de llamadas, incluyendo los valores de los parámetros en los marcos de la pila.

    Primero, necesitas crear una nueva instancia de la clase StackTrace en tu código. Luego, puedes usar su método GetFrames() para recuperar un arreglo de objetos StackFrame que representan cada llamada de método en la pila de llamadas.

    Una vez que tienes un objeto StackFrame, puedes usar su método GetMethod() para obtener información sobre el método, incluyendo su nombre y la información de los parámetros. Luego, puedes usar el método GetILOffset() para obtener el desplazamiento de la instrucción actualmente en ejecución dentro del código IL del método.

    Aquí tienes un ejemplo:

    // Crea un nuevo objeto StackTrace para obtener información de la pila de llamadas
    StackTrace stackTrace = new StackTrace();
    
    // Obtén todos los marcos en la pila de llamadas
    StackFrame[] stackFrames = stackTrace.GetFrames();
    
    // Recorre cada marco de pila
    foreach (StackFrame frame in stackFrames)
    {
        // Obtén la información del método para este marco
        MethodBase method = frame.GetMethod();
    
        // Obtén el desplazamiento IL para la instrucción actual en el método
        int offset = frame.GetILOffset();
    
        // Obtén los parámetros del método usando reflexión
        ParameterInfo[] parameters = method.GetParameters();
    
        // Muestra por pantalla el nombre del método y los valores de los parámetros
        Console.WriteLine("Método: {0}", method.Name);
        Console.WriteLine("Desplazamiento: {0}", offset);
    
        foreach (ParameterInfo parameter in parameters)
        {
            // Obtén el valor del parámetro del marco de la pila
            object value = frame.GetMethod().Invoke(null, new object[] { });
    
            Console.WriteLine("Parámetro {0}: {1}", parameter.Name, value);
        }
    }
    

    Ten en cuenta que este ejemplo utiliza reflexión para obtener los valores de los parámetros de cada llamada de método. Deberás adaptarlo a tu caso de uso específico según tus necesidades.

Comments are closed.