【问题标题】:Access violation when closing program in OSX32在 OSX32 中关闭程序时访问冲突
【发布时间】:2023-12-10 18:17:02
【问题描述】:

当我在调试 OSX 程序时关闭程序时,我收到了 AccessViolation。它在以下点中断:在System.internals.ExcUtils

procedure RaiseSignalException(ExceptionEIP: LongWord; FaultAddr: LongWord; ErrorCode: LongWord);
begin
  raise GetExceptionObject(ExceptionEIP, FaultAddr, ErrorCode);
end; 

给出的解释:

从 SignalConverter 调用 RaiseSignalException,一旦我们让事情看起来 就像我们上方有一个合法的堆栈框架一样。现在我们将创建 一个异常对象,并通过软件引发。

我是否应该尝试解决这个问题,因为关闭程序时会触发访问冲突,并且在不调试时程序不会挂起?

编辑: 即使不在 PA 服务器上进行调试,我也会收到此错误。但错误依旧。

【问题讨论】:

  • RaiseSignalException 只是异常的最后一点。查看调用堆栈以找出应用程序失败的更合理的例程。

标签: delphi debugging firemonkey delphi-xe8


【解决方案1】:

是的,您绝对应该尝试解决这个问题。即使您现在“仅”在关闭应用程序时看到该错误,它也可能指向应用程序中更严重的问题,该问题也可能在运行时发生。试想一下,这个错误是由于运行时内存损坏而发生的。

提示:尝试使用启用调试选项的 FastMM4。

【讨论】:

  • Sebastian,我现在在我的 prgram 中使用 FASTMM,但我需要知道 Memoryleak 报告的保存位置。“内存泄漏详细信息记录到与此应用程序相同的文件夹中”。但我还没有找到。这是在 Mac 上还是在 PC 上?
  • Win 和 Mac 两者。在 Mac 上运行时,报表将保存到 Mac 上的应用程序包中。右键单击该应用程序,然后单击“显示包内容”。它将位于 MyApplication.app/Contents/MacOS 文件夹中。
  • 好的,我在 user/paserver/scratchdir/user/Myaplication.app/contents/macOs/ 中找到了文件夹。但我只找到 3 个文件:-application、-application.rsm 和 libcgwind。
  • 如果应用程序在写入之前崩溃,您将不会收到内存泄漏报告。还有一些 Delphi 版本“杀死”应用程序而不执行最终部分。这也是写报告的问题。