有关在Delphi IDE中解决EStackoverflow异常的提示

时间:2010-08-20 20:02:01

标签: delphi ide stack-overflow

我正在运行Delphi 2009.当我尝试在表单编辑器中查看表单时,我不断收到堆栈溢出。所以我做了其他人会做的事情。我使用Delphi来调试自己或者更确切地说是IDE的另一个实例。

所以我知道溢出发生在哪里我只是不知道该怎么做。此表单上有一个自定义组件拦截对TForm.WindowProc的调用,因此它可以响应某些winapi消息。当组件调用 real WindowProc时,会发生堆栈溢出。

当我打破异常时,调用堆栈充满了数百次调用:

delphicoreide120.@Comppalmgr@TComponentPalettePageItemDelegate@CheckValid

到目前为止,我没有任何运气跟踪传递给WindowProc的实际消息。

任何帮助都将不胜感激。

更新

我取得了一些进展。追踪似乎正在设置此消息的消息。这是WM_CHILDACTIVATE。当此消息传递给表单WindowProc时,它会在IDE中引发一系列以堆栈溢出结束的调用。现在我只需要找出原因。

2 个答案:

答案 0 :(得分:3)

当生成EStackOverflow异常本身时(即SysUtils单位的MapFaultErrorHandler函数中)或仅当EStackOverflow已经生成时,您能否中断被提出了?

当你无法破解时:当调试器启动时,堆栈可能已经部分损坏。

如果你可以在那里做,那就去做,然后尝试浏览堆栈(更新的Delphi版本更好),以便在WindowProc中找到有问题的参数。

调试Delphi表单设计器时;使用双显示器或大屏幕设置非常方便:您可以在显示器的一侧(侧面)运行有问题的Delphi实例,另一侧运行调试Delphi实例。

编辑:虽然我在答案中提到large screenside,但要使调试步骤更加清晰:

  1. 首先确保Delphi的调试和违规实例不会在视觉上重叠。
  2. 然后越来越多地将越来越多的违规Delphi实例重叠,直到你的堆栈溢出为止。
  3. - 的Jeroen

答案 1 :(得分:0)

唉!它最终成为我最近安装的第三方组件包,与发生异常的地方完全无关。尝试在具有相同结果的新项目中查看空白表单。

编译或安装包时出错了。重建/重新安装它使异常消失。