首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在__transparentProxy 2008中调试VisualStudio实例?

如何在__transparentProxy 2008中调试VisualStudio实例?
EN

Stack Overflow用户
提问于 2010-12-23 10:23:15
回答 1查看 4.7K关注 0票数 19

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

常见的调试场景是,当程序中断时,我希望看到公共成员值,或者在VS2008 IDE中的监视窗口或立即窗口中调用代理包装实例上的方法。

出现了一个问题:在访问公共属性或在代理包装的实例上调用方法时,我总是会遇到显示在Watch /即时窗口中的异常消息。

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

我深入研究了web上的线程,发现导致此异常的原因是.NET __transparentProxy的内部反射行为。__transparentProxy实例无法访问基础在__transparentProxy实例本身中的RealProxy实例上的相应属性/方法。

AFAIK,有两种方法(没有任何设计或外部工具的帮助)来获得我想要的价值。一种是继续在“观察”窗口中展开和展开私有成员值,在几次单击之后,我最终可以访问没有代理的原始实例,我可以在该实例上做我想做的任何事情。另一种方法要快得多,但每次您想要访问原始的未代理实例:RemotingServices.GetRealProxy(myProxiedObject).Target时,仍然要付出一点努力。

这两种方法都是可行的,但需要付出一些努力才能得到我想要的实例,虽然我想要的代理实例驻留在一个深层次结构中,但是继续展开或编写RemotingServices.GetRealProxy(myProxiedObject).Target (循环这个)是非常繁琐的。

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

另一种方式似乎可行,但稍微扭曲了我的课程设计。我在代理包装的目标实例的基类中添加了一个名为protected readonly_rawInstance属性,这样我就可以在监视窗口中看到_rawInstance,这将直接引导我找到原始的未包装对象。代码可能如下所示:

代码语言:javascript
复制
public class MyDomainBase : MarshalByRefObject
{
    protected MyDomainBase _rawInstance
    {
        get{ return this; }
    }

    (... some members, ignored)
}

我想知道这个问题是否有更好的解决办法?如有任何信息或建议,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2012-06-09 20:52:04

您可能需要为此编写一个可视化工具。它是Visual的一个插件,用于“可视化”任何手表值,您可以在那里做任何您想做的事情,而不是在实际的项目代码中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4517843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档