现在我正在查看一些C#代码中的错误,我需要在某个位置获取给定的对象实例。我正坐在调试器中该位置的断点处,可以跳回堆栈并查看我需要获取的对象实例。我怀疑有一种方法可以从我所拥有的内容中获取该实例(foo.bar.baz.bla.bla.bla
或类似的东西),但我对知识如何找到它的代码知之甚少。
假设示例:
我坐在第2485行的调试器中,在某些方面简化了代码并意识到程序需要在这里设置封闭
FooBat
对象上的WizBang
属性(函数27升级调用堆栈被调用)但我没有任何直接引用封闭的WizBang
对象。但是我怀疑我有权访问的其他对象之一可以访问某些东西,这些东西可以访问封闭的WizBang
对象。但这给了我大约10K的东西,顺便说一下,我还可以访问42个不同的WizBang
对象,这些对象不是我想要的对象,所以我还需要检查它是否真的是同一个对象堆栈中的一个27步。如果我能找到如何访问它,我可以在2485行添加SomeExp.FooBat = true;
并关闭此错误!
我的问题是:有没有人制作了一个工具,使用反射和bru力搜索属性链和成员来找到一个能够提供所需对象实例的工具?
是的,我知道这是一个O(b
d
)
问题,通常无法正常工作,但这是计算机时间,而不是程序员时间,也不是时间工作,太棒了!
P.S。我认为它比我想要的更奇怪(现在<g/>
)。
答案 0 :(得分:2)
也许您应该尝试“立即窗口”,您可以在其中输入c#live。它只能评估表达式和赋值(没有声明等)。
您可以在Debug-&gt; Windows-&gt; Immediate(默认为Ctrl-Alt-I)中找到即时窗口
你有没有尝试过?
答案 1 :(得分:0)
也许您可以使用visual-studio调试器的监视窗口。您可以插入一次实例并在每一步都观察它。
答案 2 :(得分:0)
虽然阅读了所有评论和帖子但我不确定我是否正确理解了你想要的内容。您是否在Visual Studio中尝试了条件断点?他们也可以提供帮助。您可以使用它们来检查您的对象是否满足某些条件,并在这种情况下停止。
答案 3 :(得分:0)
我认为你所追求的是你自己必须写的东西。也就是说,我认为这并不困难 - 毕竟,你只需要编写一个方法,使用反射来遍历你正在使用的任何对象结构,检查特定条件。然后,您只需设置一个断点(或点击Pause),然后在您需要的任何对象结构上运行您的方法。您可以将方法设置为[Conditional(DEBUG)]
,以便它不会出现在程序的发行版中。