代码之家  ›  专栏  ›  技术社区  ›  Kenneth Cochran

有关在DelphiIDE中排除EstackOverflow异常的提示

  •  3
  • Kenneth Cochran  · 技术社区  · 14 年前

    我在运行Delphi2009。当我试图在表单编辑器中查看表单时,我总是得到一个堆栈溢出。所以我做了别人会做的。我使用Delphi来调试自己,或者更确切地说是另一个IDE实例。

    所以我知道溢出发生在哪里,我只是不知道该怎么做。此窗体上有一个自定义组件正在截获对的调用 TForm.WindowProc 因此它可以响应某些winapi消息。当组件调用 真实的 WindowProc .

    当我打破这个异常时,调用堆栈中会充满数百个调用:

    delphicoreide120.@Comppalmgr@TComponentPalettePageItemDelegate@CheckValid
    

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

    任何帮助都将不胜感激。

    更新

    我取得了一些进展。跟踪了似乎要关闭此功能的消息。它是wm_childactivate。当此消息传递到窗体的 窗口进程 它在IDE中启动一系列以堆栈溢出结束的调用。现在我只需要找出原因。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jeroen Wiert Pluimers    14 年前

    你能休息一下吗 EStackOverflow 正在生成异常本身(即 MapFault ErrorHandler 的功能 SysUtils 或者只有当estackoverflow已经被触发时?

    当不能中断时:当调试器启动时,堆栈可能已经部分损坏。

    如果你能突破这个限制,那么就去做,然后试着浏览栈(更新的delphi版本更好),在windowproc中找到有问题的参数。

    在调试Delphi窗体设计器时,使用双监视器或大屏幕设置非常方便:您可以在监视器的一个(侧)上运行Delphi有问题的实例,在另一个(侧)上运行Delphi调试实例。

    编辑:尽管我提到过 large screen side 在我的回答中,为了使调试步骤更加清晰:

    1. 首先,确保Delphi的调试和有问题的实例在视觉上不会重叠。
    2. 然后慢慢地重叠越来越多的有问题的Delphi实例,直到堆栈溢出为止。

    ——杰罗恩

        2
  •  0
  •   Kenneth Cochran    14 年前

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

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