visual trucos tag studio how code closing brackethighlighter visual-studio debugging proxy remoting

visual studio - trucos - ¿Cómo depurar una instancia de__transparentProxy en VisualStudio 2008?



visual studio code autocomplete html (1)

Actualmente estoy trabajando en un tema de depuración para mejorar la depuración en __TransparentProxy instancia resuelta desde el TransparentProxyInterceptor de Unity.

El escenario común de depuración es que mientras el programa se está rompiendo, quiero ver el valor de miembro público o llamar al método en la instancia envuelta en proxy en la ventana Inspección o en la ventana Inmediato en el IDE de VS2008.

Aquí viene el problema: al acceder a la propiedad pública o al método de llamada en mi instancia envuelta en proxy, siempre encuentro el mensaje de excepción que se muestra en la ventana Ver / Inmediato, dice

''No se pueden obtener campos o métodos de llamada en la instancia de tipo'' MyDomainObject ''porque es un proxy para un objeto remoto''.

Busqué en los hilos en la web y descubrí que la causa de esta excepción se debe al comportamiento de reflexión interna de .NET __transparentProxy . La instancia __transparentProxy no puede acceder a la propiedad / método correspondiente en la instancia de RealProxy subyacente en la instancia de __transparentProxy .

AFAIK, hay dos formas (sin ningún diseño o asistencia de herramientas externas) para obtener el valor que quiero. Una es seguir desplegando y desplegando el valor de miembro privado en la ventana Ver, y después de varios clics puedo, finalmente, acceder a la instancia original sin proxy, en la que puedo hacer lo que quiera. La otra forma es mucho más rápida, pero aún así tome un poco de esfuerzo cada vez que desee acceder a la instancia original sin proxy: RemotingServices.GetRealProxy(myProxiedObject).Target

De cualquier manera es factible, pero requiere algunos esfuerzos para obtener la instancia que quiero, y mientras que la instancia con proxy que quiero reside en una jerarquía profunda, es tremendamente tedioso seguir desplegando o escribiendo RemotingServices.GetRealProxy(myProxiedObject).Target ).

He encontrado dos soluciones, una es intentar obtener ayuda de DebuggerTypeProxyAttribute en .NET, pero parece que no lo hago porque tengo que agregar este atributo a la clase derivada de RealProxy y realmente no quiero modificar El código fuente de la clase InterceptingRealProxy en Unity.

La otra forma parece factible, pero tuerce un poco el diseño de mi clase. Agrego una propiedad de protected readonly llamada _rawInstance en la clase base de mi instancia de destino envuelta en proxy, por lo que puedo ver _rawInstance en mi ventana de observación que me lleva directamente a mi objeto original sin envolver. El código puede verse así:

public class MyDomainBase : MarshalByRefObject { protected MyDomainBase _rawInstance { get{ return this; } } (... some members, ignored) }

Me pregunto si hay alguna solución mejor para este problema? Cualquier información o consejo sería muy apreciado.


Es posible que desee escribir un visualizador para eso. Es un complemento para que Visual Studio "visualice" cualquier valor de vigilancia y puede hacer lo que quiera hacer allí, en lugar de hacerlo en el código de su proyecto real.