FastMM 在关闭应用程序时在发布版本中显示错误

FastMM showing error in release builds when closing application

我有一些客户在关闭我的应用程序时有时会报告错误:

由于以下原因,这有点令人惊讶:

  1. 卸载 FastMM 后调用 GetMEM 有点奇怪(用户报告说他正在使用我的应用程序的命令行功能,所以我会尝试调查一下,但我不会在应用程序终止后调用任何东西.但是好吧,值得研究的东西)

  2. 我用的是release模式设置,怎么FastMM显示错误信息? 这对我来说是最重要的问题...

这些是我用于发布版本的定义:

  {$undef FullDebugMode}
  {$undef EnableMemoryLeakReporting}
  {$undef CheckHeapForCorruption}
  {$undef UseOutputDebugString}
  {$undef RawStackTraces}
  {$undef LogErrorsToFile}
  {$undef LogMemoryLeakDetailToFile}
  {$undef ClearLogFileOnStartup}
  {$undef HideExpectedLeaksRegisteredByPointer}
  {$define ASMVersion}
  {$define AssumeMultiThreaded}

该应用程序是多线程的,但不与 dll 或类似程序共享内存管理器

根据FastMM source code,你可以这样做:

{$undef DetectMMOperationsAfterUninstall}

为了避免这个错误信息。

源代码摘录:

{$ifdef DetectMMOperationsAfterUninstall}
{Invalid handlers to catch MM operations after uninstall}
function InvalidFreeMem(APointer: Pointer): {$ifdef fpc}NativeUInt{$else}Integer{$endif}; forward;
function InvalidGetMem(ASize: {$ifdef XE2AndUp}NativeInt{$else}{$ifdef fpc}NativeUInt{$else}Integer{$endif}{$endif}): Pointer; forward;
function InvalidReallocMem({$ifdef fpc}var {$endif}APointer: Pointer; ANewSize: {$ifdef XE2AndUp}NativeInt{$else}{$ifdef fpc}NativeUInt{$else}Integer{$endif}{$endif}): Pointer; forward;
function InvalidAllocMem(ASize: {$ifdef XE2AndUp}NativeInt{$else}{$ifdef fpc}NativeUint{$else}Cardinal{$endif}{$endif}): Pointer; forward;
function InvalidRegisterAndUnRegisterMemoryLeak(APointer: Pointer): Boolean; forward;
{$endif}