存在调试信息(MAP 文件)时,FastMM 在 64 位上崩溃

FastMM crashes on 64 bits when debug info (MAP file) is present

我正在尝试为 64 位(Win7,Delphi XE7)编译一个旧程序。但是,我对 FastMM 有疑问。它没有显示泄漏报告,而是在 FastMM_FullDebugMode64.dll

中崩溃

错误是:

---------------------------
Debugger Exception Notification
---------------------------
Project TestCompile.exe raised exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'.

这是重现问题所需的代码:

program TestCompile;
uses
  fastmm4,
  Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


UNIT Unit1;
...  
IMPLEMENTATION  

VAR TSL: TStringList;
procedure TForm1.Button1Click(Sender: TObject);
begin
 TSL:= TStringList.Create;  // we generate a leak here. fastmm should report this
end;

end.

如您所见,没有 personal/3rd 派对代码。一切都通过 Delphi 代码完成。
DLL 是随 FastMM (4.992/2016) 包提供的。

它适用于 32 位。在 64 位上,如果我在 IDe(调试器)下 运行,它会使程序崩溃。我只能重置程序 (ctrl+f2)。在 IDE 之外程序正常工作(FastMM 配置为在 IDE 之外 运行 时不显示日志)。

更新: 这与调试信息的存在有关('Delphi compiler -> Linking' 下的'Map file')。

存储库中包含的预编译 64 位 DLL 似乎已过时,无法反映过去所做的更改。

当可执行文件不包含调试信息时可能会发生崩溃。

来自FastMM_FullDebugMode.dpr

Version 1.61 (5 September 2010):
  - Recompiled using the latest JCL in order to fix a possible crash on shutdown
    when the executable contains no debug information. (Thanks to Hanspeter
    Widmer.)

使用较新的 JCL 重新编译了 DLL,它不再崩溃了。

还报道了这个:https://github.com/pleriche/FastMM4/issues/27