visual-studio - 如何在 Visual Studio 2008 中调试透明代理实例?

标签 visual-studio debugging proxy remoting

我目前正在研究一个调试主题,以改进对 __TransparentProxy 的调试。从 Unity 的 TransparentProxyInterceptor 解析的实例.

常见的调试场景是,当程序中断时,我想在 VS2008 IDE 的 Watch 窗口或 Immediate 窗口中查看公共(public)成员值或调用代理包装实例上的方法。

问题来了:在我的代理包装实例上访问公共(public)属性或调用方法时,我总是遇到显示在 Watch/Immediate 窗口中的异常消息,说

'无法获取'MyDomainObject'类型实例上的字段或调用方法,因为它是远程对象的代理。'

我在网上挖掘了线程,发现这个异常的原因是由于.NET的内部反射行为__transparentProxy . __transparentProxy实例无法访问 RealProxy 上的相应属性/方法__transparentProxy 中的底层实例实例本身。

AFAIK,有两种方法(没有任何设计或外部工具的帮助)来获得我想要的值(value)。一是在Watch窗口中不断展开和展开私有(private)成员值,点击几下后,终于可以访问免代理原始实例,在上面可以为所欲为。另一种方式要快得多,但每次您想要访问原始的未代理实例时仍然需要一些努力:RemotingServices.GetRealProxy(myProxiedObject).Target
无论哪种方式都是可行的,但需要付出一些努力才能获得我想要的实例,虽然我想要的代理实例位于较深的层次结构中,但继续展开或编写 RemotingServices.GetRealProxy(myProxiedObject).Target 非常乏味(循环这个)。

我提出了两种解决方案,一种是尝试从 DebuggerTypeProxyAttribute 获得一些帮助。在 .NET 中,但似乎没有这样做,因为我必须将此属性附加到 RealProxy -派生类,我真的不想修改InterceptingRealProxy的源代码Unity 中的类。

另一种方法似乎可行,但稍微扭曲了我的类(class)设计。我添加了 protected readonly名为 _rawInstance 的属性在我的代理包装的目标实例的基类中,因此我可以看到 _rawInstance在我的监 window 口中,它直接将我引导到我原来的未包装对象。代码可能如下所示:

public class MyDomainBase : MarshalByRefObject
{
    protected MyDomainBase _rawInstance
    {
        get{ return this; }
    }

    (... some members, ignored)
}

我想知道这个问题是否有更好的解决方案?任何信息或提示将不胜感激。

最佳答案

您可能想为此编写一个可视化工具。它是 Visual Studio 的一个插件,可以“可视化”任何监视值,您可以在其中做任何您想做的事情,而不是在您的实际项目代码中。

关于visual-studio - 如何在 Visual Studio 2008 中调试透明代理实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517843/

相关文章:

visual-studio - 在 Visual Studio 中通过不同的解决方案进行调试

java - 无法摆脱 JdbcOdbcDriver.finalize() 中的断点

node.js - 使用nginx后socket.io响应慢

proxy - 如何在 docker-compose 中使用本地代理设置

java - 在代理后面使用 HtmlUnit

c++ - 避免多态类中的虚表

visual-studio - Visual Studio 插件;突出显示与所选单词匹配的所有单词?

c# - 如何使用本地 WSDL 文件中的 Web 服务?

linux - KGDB 没有将地址与符号相关联

Java调试问题