DelphiIDE中EStackoverflow异常的故障排除提示
我正在运行德尔福2009。当我试图在表单编辑器中查看表单时,我总是遇到堆栈溢出。所以我做了其他人都会做的事。我使用Delphi调试自己,或者更确切地说,调试IDE的另一个实例 所以我知道溢出发生在哪里,我只是不知道该怎么办。此窗体上有一个自定义组件正在拦截对DelphiIDE中EStackoverflow异常的故障排除提示,delphi,ide,stack-overflow,Delphi,Ide,Stack Overflow,我正在运行德尔福2009。当我试图在表单编辑器中查看表单时,我总是遇到堆栈溢出。所以我做了其他人都会做的事。我使用Delphi调试自己,或者更确切地说,调试IDE的另一个实例 所以我知道溢出发生在哪里,我只是不知道该怎么办。此窗体上有一个自定义组件正在拦截对TForm.WindowProc的调用,以便它可以响应某些winapi消息。当组件调用realWindowProc时,堆栈溢出发生 当我在异常上中断时,调用堆栈中充满了数百个对以下对象的调用: delphicoreide120.@Comppa
TForm.WindowProc
的调用,以便它可以响应某些winapi消息。当组件调用realWindowProc
时,堆栈溢出发生
当我在异常上中断时,调用堆栈中充满了数百个对以下对象的调用:
delphicoreide120.@Comppalmgr@TComponentPalettePageItemDelegate@CheckValid
到目前为止,我还没有找到传递给WindowProc的实际消息
任何帮助都将不胜感激
更新
我取得了一些进展。跟踪到似乎要设置此设置的消息。这是WM_CHILDACTIVATE。当此消息被传递到窗体的WindowProc
时,它会在IDE中引发一系列调用,最终导致堆栈溢出。现在我只需要找出原因。当异常本身正在生成时(即在单元的MapFault
或ErrorHandler
函数中),或者仅当EStackOverflow已经引发时,您是否可以中断
无法中断时:当调试器启动时,堆栈可能已经部分损坏
如果您可以在这里中断,那么就这样做,然后尝试向上浏览堆栈(更新的Delphi版本更好),以在WindowProc中找到有问题的参数
调试Delphi窗体设计器时;使用双监视器或大屏幕设置非常方便:您可以在监视器的一侧运行有问题的Delphi实例,在另一侧运行调试Delphi实例
编辑:虽然我在回答中提到了大屏幕
和侧面
,但为了使调试步骤更加清晰:
--杰伦啊!它是我最近安装的第三方组件包,与异常发生的位置完全无关。尝试在新项目中查看空白表单,但结果相同
程序包的编译或安装出现问题。重新构建/重新安装会使异常消失。你能更改组件源吗?@Mason:如果你没有双监视器(是的,我们中的一些人会遇到这种情况:-),请确保应用程序的窗体/窗口不被调试它的IDE窗口覆盖(实际上与双监视器的操作相同)。这将极大地帮助你处理周围的消息,因为你不会得到应用程序切换和重新绘制。