2009-06-19 83 views
2

现在我正在查看一些C#代码中的一个错误,我需要在某个位置获取给定的对象实例。我在调试器的那个位置坐在一个断点上,可以跳回堆栈并查看我需要获取的对象实例。我怀疑是否有办法从我拥有的实例(foo.bar.baz.bla.bla.bla或类似的东西)中获得该实例,但我对代码知之甚少,无法知道如何找到它。找到在调试器中获取对象实例的方法?

假设的例子:

我坐在调试器在线路2485在某一简化代码,实现了程序需要,就在这里,设置封闭WizBang对象的FooBat财产(调用函数27调用调用堆栈的函数被调用),但是我没有任何直接引用的封装WizBang对象。不过,我怀疑我有权访问的其他对象中有一个可以访问某些可以访问封闭对象的内容。但是,这给我提供了大约10K个东西,顺便说一下,我还可以访问42个不同的WizBang对象,这些对象不是我想要的对象,因此我还需要检查它是否与上述27个步骤完全相同堆叠。如果我能找到如何访问它,我可以在这里添加SomeExp.FooBat = true; 2485行,并关闭这个错误!

我的问题是:有没有人提出,使用反射和杂音力搜索属性和成员的链,找到一个给出所需对象实例的工具吗?

是的,我知道这是一个O(bd)问题,往往是行不通的,但它的计算时间,不是程序员的时间,当它的工作,这将是太棒了!

p.s.我给它比我想要的更少(甚至现在的<g/>)。

+0

这有点不清楚。你能提供一个例子吗? – Pedro 2009-07-01 17:59:55

+0

我试图澄清这个问题,但我想不出比问题中已有的更好的例子。 – BCS 2009-07-01 19:48:02

+0

详细说明你的意思是“发现”。你想在调试器中查看实例成员,你想获得它们的源位置,你想创建它的一个实例... etc – 2009-07-01 20:11:25

回答

0

也许你可以使用visual-studio调试器的监视窗口。你可以插入你的实例一次,每一步看。

2

也许你应该尝试“即时窗口”,你可以在其中输入c#live。它只能评估表达式和赋值(没有声明等)。

您可以找到调试 - > Windows的>即时(CTRL-ALT-我默认)

你尝试已经即时窗口?

0

虽然阅读您的所有评论和帖子,但我不确定我是否正确理解您的要求。你在Visual Studio中尝试了条件断点吗?他们也可能会有所帮助。您可以使用它们来检查您的物体是否符合某些条件,并在此情况下停止。

0

我认为你所追求的是你必须自己写的东西。也就是说,我不认为这很困难 - 毕竟,您只需编写一个使用反射的方法来遍历您正在处理的任何对象结构,并检查特定的条件。然后,您只需设置一个断点(或点击暂停),然后在您需要的任何对象结构上运行您的方法。您可以将方法设置为[Conditional(DEBUG)],以便它不会出现在程序的发行版中。