我在表单中添加了许多控件(至少数百个),其中相当多是自定义控件,InitializeComponent中的代码非常庞大。尽管如此,我仍然不明白为什么会有任何递归,为什么会发生堆栈溢出。只有当我在VS (2008,它使用.net Framework3.5和Winforms)内部运行调试版本时才会发生这种情况。如果我双击可执行文件,应用程序就会运行。有人能告诉我这是怎么回事吗?我能做些什么来找出原因?谢谢。
发布于 2013-03-04 11:01:51
你的InitializeComponent方法的代码可能包含很多局部变量/大局部变量(例如,带有很多字段的struct )-它们几乎占用了所有可用的堆栈空间,并且当在VS中的调试器下运行时,堆栈中的空间会更少,因此出现了错误。
如果这就是问题所在,可能会修复将局部变量转换为类字段,和/或将InitInstance方法拆分为具有自己的局部变量的不同方法-这些方法将共享相同的堆栈空间。
发布于 2013-03-04 08:40:53
你最好的办法就是找出发生异常的确切位置--控制Alt E会弹出异常对话框--在抛出公共语言运行时异常时,单击“抛出”下面的,调试就会立即停止--在那里,你可以查看调用堆栈并跟踪调用,看看哪里出了问题。(如果快捷方式不起作用,可以在visual studio中单击“调试/异常”进行同样的操作)
(为了清楚起见-- exceptions窗口会弹出一个对话框,左边有一个列表,C++ Exception,Common Language Runtime Exception,等等……您想要单击与公共语言运行时异常一致的第一个复选框,以便您的代码在遇到问题时立即中断,然后进行进一步的投资,使用debug/windows/callstack -或control/alt C-这将使您快速了解是否存在递归或其他问题。)
https://stackoverflow.com/questions/15192729
复制相似问题