我在表单中添加了很多控件(至少数百个),其中很多是自定义控件,而且InitializeComponent中的代码很大。不过,我根本看不出有什么递归,为什么堆栈溢出发生。 只有当我从VS内部运行Debug版本时才会发生这种情况(2008年,它使用.net framework 3.5和Winforms)。如果我只是双击可执行文件,应用程序就会运行。 有人能告诉我这是怎么可能的,我能做些什么来找出原因? 感谢。
答案 0 :(得分:2)
你的InitializeComponent
方法的代码可能包含很多局部变量/大局部变量(例如struct
有很多字段) - 几乎可以使用所有可用的堆栈空间,并且在运行时在VS内的调试器下,堆栈中的空间会少一些,因此就是错误。
如果这是问题,可能会修复将局部变量转换为类字段,和/或将各种方法中的InitInstance
方法与它们自己的局部变量分开 - 这将共享相同的堆栈空间。
答案 1 :(得分:1)
最好的办法是找出异常发生的确切位置 - 控制Alt E打开Exceptions对话框 - 单击“Thrown”下的公共语言运行时异常,一旦抛出错误,调试就会停止 - 从那里你可以查看调用堆栈并跟踪调用以查看出错的位置。 (如果快捷方式不起作用,您可以在visual studio中单击调试/异常以获取相同的内容)
(只是要清楚 - Exceptions窗口会弹出一个左下方列表的对话框,C ++异常,公共语言运行时异常等等...你想点击第一个复选框,符合公共语言运行时异常这样你的代码就会在你遇到问题时立即中断然后进行进一步的调查,调试/ windows / callstack - 或者控制/ alt C - 它会很快让你知道你是否有递归或其他问题。)