2010-04-21 17 views
5

Tengo un método one-liner muerto simple que no quiero ver en el rastro de la pila: ¿es eso posible? tal vez marcarlo con un atributo?C#: cómo ocultar un método del rastro de pila?

Solo para aclarar, no estoy intentando imprimir la traza, ni volver a lanzar, ni tener un paso automático en el depurador. Me gustaría que el método no se muestre en la traza, en primer lugar, porque el seguimiento es manejado por un código de terceros. Quiero control en tiempo de ejecución, no estoy interesado en la depuración. Lo digo porque la mayoría de lo que he leído en StackTrace parecen tratar sobre estos temas.

+0

Si es un simple trazador de líneas, entonces es automático. El optimizador JIT lo alineará. Pero no mientras tenga adjunto el depurador. –

+0

Hans, mira mi comentario a la respuesta de Steven. – benblo

+0

No se olvide de marcar su respuesta favorita ;-) – Steven

Respuesta

2

Esto solo se puede hacer cuando su método está en línea. O el JIT lo hace, o lo haces tú mismo (cambia el código). El JIT sin embargo, es bastante conservador sobre los métodos de alineación y prácticamente solo lo hace cuando el método es muy pequeño, o cuando el método se usa en un bucle.

+0

Hm ... para ser sincero, lo dudo: incluso si está en línea, ¿el StackTrace no se rastrearía de alguna manera? Y no se comprueba en la práctica, ya que mi método está ahí, tanto en depuración como en versión, y es solo un contenedor de una sola línea. – benblo

+1

No. Cuando un método está en línea, realmente se ha ido. No hay invocación de método, por lo tanto, un recorrido de pila no lo revelará. Debido a que un rastro de pila se construye usando un recorrido de pila, el trazado de pila ya no mostrará su método. – Steven

-1

Como se dice en respuesta a otra pregunta Most Useful Attributes, debe especificar el atributo System.Diagnostics.DebuggerHidden para su método.

+0

Desafortunadamente eso no aplica aquí, como el nombre sugiere (y la documentación indica) es solo un atributo de depurador, depende del depurador filtrar los métodos marcados, pero el método todavía está registrado en el rastro de la pila en el primer lugar. Mi contexto no es de depuración, esto es para Unity (motor de juego), que genera la pila completa de registros o excepciones, por lo que Unity debería filtrar los métodos intencionalmente. Me temo que lo que estaba buscando hacer (no registrar en absoluto el rastro de la pila) es simplemente imposible. – benblo

Cuestiones relacionadas