尝试查看自定义对象时QuickWatch失败并调试停止

时间:2011-03-11 15:24:52

标签: exception debugging

我有一个Branch对象,它有一些Name,Link和一些其他POCO属性。它还有一个Parent对象,它是另一个Branch项的链接。它还有一个Children属性,它是一个TreeBranches对象。这是一个IList。这基本上是我对TreeNode的替代。

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

我在职业生涯中制作了很多物品,我可以“观察”它们。我应该申请一些特殊属性吗?是否有某些错误日志我可以看到问题是什么?我已经设置它打破CLR例外的“抛出”错误但没有。也许是因为我已经处于“休息”状态。

“可能”成为问题的唯一另一件事是我已经覆盖了Branch对象上的ToString方法,以显示分支上的特性和子项的数量。然后TreeBranches对象也有一个ToString方法,递归循环遍历每个Branch对象。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我想如果你取消选中Tools-> Options-> Debugging中的“启用属性评估和其他隐式函数调用”,就不会发生这种情况?

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

如果是这样,我愿意打赌你的ToString实现有问题,进入无限循环,或者只是性能问题而且耗时太长。尝试用“return string.Empty”替换那些.ToStrings。并查看问题是否仍然存在?

与方法调用不同,调试器假定对象的对象的.ToString应该快速返回并且没有副作用,因此每次F5和break时都会重新评估它,而对象仍然在观看窗口。

如果它不是.ToString,那么对象上的某些属性可能会做很多工作并超时 - 检查对象上是否存在这样的属性,并考虑使用[DebuggerBrowsable(DebuggerBrowsableState.Never)进行装饰。 )。