【问题标题】:"Search" the members of an object in .NET's JIT debugger在 .NET 的 JIT 调试器中“搜索”对象的成员
【发布时间】:2009-09-16 04:51:58
【问题描述】:

我是目前公司的一名相对较新的员工,因此在学习软件和架构方面我仍然“喝水”。我发现自己在编写单元测试时处理了一些非常大的对象,比如说讨论“SavedOrder”,我需要找到在哪里可以找到我正在寻找的特定数据。

我遇到的问题是,我知道每个 SavedOrder 都有,在它的继承和成员(谁有成员,谁有成员,等等)的内部某处,我的数据正在寻找。

现在,我发现自己盲目地扩大手表并在物体上徘徊,希望能找到我正在寻找的东西。是否有人知道用于查找此对象是否具有“A 型”或有价值的“SomeEnum.SomeValue”的插件/技术?

编辑:所有好的输入,还没有完全解决我的目标。对象浏览器(对象浏览器和反射器)很好地浏览了每个对象的成员,但在将 A 点链接到 D 点的目标中,它们实际上只是帮助将 A 点连接到 B 点或 D 到 C 点。

我猜最能描述解决方案的伪 c# 递归算法是:

WheresWaldo FindMember(Object o)
{
    foreach(PublicMember member in o)
    {
         if(o.IsType(MyType))
            return Success!;
         else
            return WheresWaldo(member);
    }


}

谁知道呢,也许不可能。

【问题讨论】:

    标签: c# .net visual-studio debugging jit


    【解决方案1】:

    我不确定我是否完全跟随你,但也许你可以使用条件断点。在相关代码上设置断点,右键选择条件断点。从这里您可以编写一段代码,每次评估断点时都会评估该代码。这样,您可以指定仅在满足条件时停止。

    编辑:根据您的 cmets,我会说 Reflector 可能有用。它可以选择搜索特定类型或成员。使用相关程序集启动 Reflector。按 F3 进行搜索,然后为成员选择 Ctrl-M,然后键入您要查找的成员的名称。您可以打开/关闭完全匹配以帮助您进行搜索。

    【讨论】:

    • 我确实发现很难描述我想要什么。澄清一下,假设我的目标是找到订单的保修期限,并且该保修在 SavedOrder.Header.ProductSupport.WarrantyLength 中,但我不知道它在哪里(还有更多灰色对象名称要处理)。我将如何查找该字段的位置?
    • 您是要查找特定实例的 WarrantyLength 值还是不确定哪种类型具有此属性?
    • 我不确定它在“哪里”:)。我试图展示的是该属性是“4 深”,因为 SavedOrder 有一个 Header,它有一个 ProductSupport,它有一个 WarrantyLength 属性。我凭直觉知道保修在 SavedOrder 中的某处,但不知道如何导航数百个属性以找到它。
    【解决方案2】:

    ObjectBrowser 可能是您想要使用的。您可以使用它搜索属性。

    【讨论】:

    • 哦,差不多,我用过但忘了。唯一的缺陷是我可以浏览 SavedOrder 类型,它可以显示所有继承和拥有的成员,但不能显示这些成员的成员(即 ProductSupport 是 Header 的成员而不浏览到 Header)。所以 WarrantyInfo 仍然很难找到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多