VS 2008中的调试设计器处理

时间:2020-03-06 14:30:18  来源:igfitidea点击:

我以" ListE <T>"类型的形式设置了一个公共属性,其中:

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

是的,这很麻烦,但这就是设计器要求它在"属性"窗口中显示为可编辑集合的条件。哪有!因此,我单击小[..]按钮以编辑集合,然后单击"添加"以将项目添加到集合中。

Arithmetic operation resulted in an overflow.

现在,这是一个非常基本的列表,仅是扩展数组而已。在整个过程中,唯一与算术最接近的部分是在expand函数中,即使使用左移而不是乘法,也不会溢出。所有这些使我认为在Designer内引发了此异常,这可能是由于我对实现细节有些不注意而引起的,但是我找不到测试或者调试该场景的方法。有人有什么聪明的主意吗?

编辑:是的,我可以成功使用该属性,甚至可以手动使用,即。在OnLoad处理程序中,我想如果无法正常工作,我将不得不求助于此,但这并不理想。 :(

解决方案

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

checked
{
   // ...
}

句法。

我不明白是什么促使我们尝试以这种方式重新发明List <T>车轮,但回答了问题:我将在类的构造函数中添加" System.Diagnostics.Debugger.Break()"行。

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

我们不必添加Debugger.Break();。调用代码进行调试。我们可以打开另一个VS实例并将其添加到使用它的实例上,并且应该可以毫无问题地对其进行调试(只需确保已加载符号)。