我正在运行Delphi 2009.当我尝试在表单编辑器中查看表单时,我不断收到堆栈溢出。所以我做了其他人会做的事情。我使用Delphi来调试自己或者更确切地说是IDE的另一个实例。
所以我知道溢出发生在哪里我只是不知道该怎么做。此表单上有一个自定义组件拦截对TForm.WindowProc
的调用,因此它可以响应某些winapi消息。当组件调用 real WindowProc
时,会发生堆栈溢出。
当我打破异常时,调用堆栈充满了数百次调用:
delphicoreide120.@Comppalmgr@TComponentPalettePageItemDelegate@CheckValid
到目前为止,我没有任何运气跟踪传递给WindowProc的实际消息。
任何帮助都将不胜感激。
更新
我取得了一些进展。追踪似乎正在设置此消息的消息。这是WM_CHILDACTIVATE。当此消息传递给表单WindowProc
时,它会在IDE中引发一系列以堆栈溢出结束的调用。现在我只需要找出原因。
答案 0 :(得分:3)
当生成EStackOverflow异常本身时(即SysUtils单位的MapFault
或ErrorHandler
函数中)或仅当EStackOverflow已经生成时,您能否中断被提出了?
当你无法破解时:当调试器启动时,堆栈可能已经部分损坏。
如果你可以在那里做,那就去做,然后尝试浏览堆栈(更新的Delphi版本更好),以便在WindowProc中找到有问题的参数。
调试Delphi表单设计器时;使用双显示器或大屏幕设置非常方便:您可以在显示器的一侧(侧面)运行有问题的Delphi实例,另一侧运行调试Delphi实例。
编辑:虽然我在答案中提到large screen
和side
,但要使调试步骤更加清晰:
- 的Jeroen
答案 1 :(得分:0)
唉!它最终成为我最近安装的第三方组件包,与发生异常的地方完全无关。尝试在具有相同结果的新项目中查看空白表单。
编译或安装包时出错了。重建/重新安装它使异常消失。