2011-03-11 45 views
2

我有一个Branch对象具有一些Name,Link和一些其他POCO属性。它还有一个Parent对象,它是另一个Branch项目的链接。它也有一个TreeBranches对象的Children属性。这是一位IList。这基本上是我替换TreeNode。QuickWatch失败并尝试查看自定义对象时停止调试

在调试我的应用程序时,我可以在任何地方的断点处停止,并尽可能嵌套QuickWatch任何其他对象。他们都工作。但是,当我快速查看分支对象时,它会向我显示“根”项。当我试图去任何一个孩子的分支时,它暂停了一会儿,然后所有的价值都不再......活着?这意味着我无法长时间点击刷新按钮。当我关闭QuickWatch窗口时,我发现我的网站在页面上,就好像我无法连接到网站。我甚至无法继续击打F5。

我在自己的职业生涯中做了大量的东西,我可以“看”他们。我应该申请一些特殊的属性吗?有什么地方有错误日志我可以看到问题是什么?我已经将它设置为打破CLR异常的“抛出”错误,但没有任何结果。也许是因为我已经在“休息”了。

“可能”是唯一的问题是,我已覆盖Branch对象上的ToString方法以显示Branch上的propeties和Children的计数。然后TreeBranches对象也有一个ToString方法,递归循环每个Branch对象。

有什么想法?

+0

由于我忘了提及它,这是在Visual Studio 2010中(Windows 7 64位 ) – Grandizer 2011-03-11 18:14:43

回答

0

我想这不会发生,如果你在工具 - >选项 - >调试中取消选中“启用属性评估和其他隐式函数调用”?

当事情停止工作时,执行文本“功能评估由于先前的功能评估超时而被禁用,您必须继续执行”。出现?

如果是这样,我敢打赌,你的ToString实现是有问题的,进入一个无限循环,或者只是有性能问题,需要很长时间。尝试用“return string.Empty;”代替那些.ToStrings并看看问题是否仍然存在?

与方法调用不同,调试器假定对象的.ToString应该快速返回并且没有副作用,因此每次在F5中断并重新评估时,对象仍然处于Watch窗口。

如果它不是.ToString,它可能是对象上的一些属性,它正在执行大量工作并超时 - 检查对象上是否存在此类属性,并考虑使用[DebuggerBrowsable(DebuggerBrowsableState)对其进行装饰。决不)]。