gpt4 book ai didi

delphi - 在 Delphi IDE 中排除 EStackoverflow 异常的提示

转载 作者:行者123 更新时间:2023-12-03 15:29:48 27 4
gpt4 key购买 nike

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

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

当我中断异常时,调用堆栈充满了数百个调用:

delphicoreide120.@Comppalmgr@TComponentPalettePageItemDelegate@CheckValid

到目前为止,我还没有成功地追踪到传递给 WindowProc 的实际消息。

如有任何帮助,我们将不胜感激。

更新

我已经取得了一些进展。追踪到似乎将其关闭的消息。它是 WM_CHILDACTIVATE。当此消息传递到表单的 WindowProc 时,它会在 IDE 中引发一系列调用,最终导致堆栈溢出。现在我只需要找出原因。

最佳答案

EStackOverflow 时你能打破吗?异常本身正在生成(即在SysUtils单元的MapFaultErrorHandler函数中)或者仅当EStackOverflow已经引发时?

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

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

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

编辑:虽然我在回答中提到了大屏幕侧面,以使调试步骤更加清晰:

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

--杰罗恩

关于delphi - 在 Delphi IDE 中排除 EStackoverflow 异常的提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com