在VS 2008中调试Designer处理

时间:2008-09-21 12:13:44

标签: .net winforms visual-studio-2008 designer

我有一个公共属性集,格式为ListE<T>,其中:

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

是的,它是满口的,但这就是Designer在“属性”窗口中显示为可编辑集合所需的内容。它做到了!因此,我单击小[..]按钮编辑集合,然后单击添加以将项目添加到集合中。

  

算术运算导致溢出。

现在,这是一个非常基本的List,只不过是一个扩展的数组。在整个事物中接近算术的唯一部分是在扩展函数中,甚至使用左移而不是乘法,因此不会溢出。这一切都让我觉得这个异常是在Designer中引发的,可能是由于我对实现细节的一些小注意力不集中,但我找不到测试或调试该场景的方法。有没有人有任何聪明的想法?

编辑:是的,我可以成功使用该属性,甚至可以手动使用,即。在OnLoad处理程序中,我想如果我不能使用它,那就是我将不得不求助的东西,但这并不理想。 :(

3 个答案:

答案 0 :(得分:3)

我无法理解是什么促使你尝试重新发明List&lt; T&gt;以这种方式轮流,但回答你的问题:我会在你的类的构造函数中添加一行“System.Diagnostics.Debugger.Break()”。

然后尝试在设计器中使用它,并且您将获得一个弹出窗口,询问您是否要附加调试器。将Visual Studio的第二个实例作为调试器附加,您将能够在代码中设置一些断点并开始调试。

答案 1 :(得分:0)

一个开始的地方是它可能正在用ListE`1 :: Count属性进行数学运算。如果它有一些微妙的缺陷(即它比返回this.innerList.Count更复杂),它可能导致设计者在某些操作上算术溢出。除非特别要求使用

,否则通常不会发生算术溢出
checked
{
   // ...
}

语法。

答案 2 :(得分:0)

您不必添加Debugger.Break();调用你的代码来调试它。你可以打开一个不同的VS实例并附加到你使用它的那个实例上,你应该可以调试它而没有任何问题(只需要确保你已经加载了符号)。