¿Es posible obtener los valores de los parámetros para cada marco en la pila de llamadas en .NET?

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy hablando de código .NET administrado. Si ejecutamos cualquier programa y adjuntamos VS, podemos ver los valores de los parámetros para cada método en la pila de llamadas. Me gustaría crear una solución de registro que registrará los valores de todos los parámetros para cada método en la pila de llamadas. En realidad necesito esta información en caso de que ocurra una excepción.

Sé que es posible con la API de perfiles. Pero me pregunto si es posible solo con código administrado?

ACTUALIZACIÓN: Ok, probablemente con .NET puro es imposible. Entonces, puede ser con algún tipo de código no administrado ... el punto es hacerlo desde la propia aplicación. Una aplicación en caso de una excepción podría llamar a alguna biblioteca (puede ser no administrada) que devuelve información sobre los valores de los métodos en la pila de llamadas. Solo pensamientos ...

¿Fue útil?

Solución

Los valores de los parámetros no se almacenan en la instancia de StackFrame. De hecho, no están grabados / registrados en absoluto, a menos que elija hacerlo explícitamente.

Una forma obvia de registrar estos valores es usar AOP. Sin duda, implicaría un costo, pero en conjunto con un marco de registro y el nivel de registro correcto, puede ser una alternativa. También puede elegir instrumentar solo algunos tipos / métodos en su código base, donde es más probable que se produzcan excepciones. Probablemente elegiría Postsharp por sus capacidades de tejido estático, para emitir llamadas de registro.

De todos modos, está lejos de ser una solución ideal, pero me temo que no tendrás muchas opciones si estás atrapado en el mundo administrado.

Otros consejos

Su mejor opción es probablemente insertar el código de seguimiento requerido en los métodos relevantes. De esa manera, puede adjuntar escuchas de rastreo y volcar valores cuando sea necesario.

Sé que no es lo que estás pidiendo, pero es una forma de obtener los datos.

Alternativamente, puedes depurar la aplicación usando WinDbg. Los comandos! Clstack /! Dso le permitirán inspeccionar parámetros y apilar objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top