0

我的表单中添加了很多控件(至少数百个),其中不少是自定义控件,InitializeComponent 中的代码非常庞大。尽管如此,我还是看不出怎么会有任何递归以及为什么会发生堆栈溢出。只有当我从 VS 内部运行 Debug 版本时才会发生这种情况(2008,它使用 .net framework 3.5 和 Winforms)。如果我只是双击可执行文件,应用程序就会运行。有人可以告诉我这怎么可能,我该怎么做才能找出原因?谢谢。

4

2 回答 2

2

最好的办法是找出异常发生的确切位置 - 控制 Alt E 调出“异常”对话框 - 单击“抛出”下的公共语言运行时异常,一旦抛出错误,调试就会停止 - 从那里你可以查看调用堆栈并跟踪调用以查看哪里出错了。(如果快捷方式不起作用,您可以单击 Visual Studio 中的调试/异常进行相同操作)

(只是要清楚 - 异常窗口会弹出一个对话框,其中包含左侧列表、C++ 异常、公共语言运行时异常等...您要单击与公共语言运行时异常一致的第一个复选框,以便您的一旦你遇到问题,代码就会中断然后为了进一步调查,调试/windows/callstack - 或 control/alt C - 这将很快让你看到你是否有递归或其他问题。)

于 2013-03-04T00:40:53.140 回答
2

可能您的InitializeComponent方法的代码包含很多局部变量/大局部变量(例如struct,带有很多字段) - 它们几乎使用了所有可用的堆栈空间,并且当在 VS 中的调试器下运行时,空间会少一点堆栈,因此错误。

如果这是问题所在,可能会修复将局部变量转换为类字段,和/或将InitInstance方法拆分为具有自己的局部变量的各种方法 - 这将共享相同的堆栈空间。

于 2013-03-04T03:01:51.130 回答