Delphi 当存在调试信息(映射文件)时,FastMM在64位上崩溃

Delphi 当存在调试信息(映射文件)时,FastMM在64位上崩溃,delphi,crash,access-violation,fastmm,Delphi,Crash,Access Violation,Fastmm,我正在尝试编译一个64位的旧程序(Win7,delphixe7)。但是,我对FastMM有一个问题。它没有显示泄漏报告,而是在FastMM_FullDebugMode64.dll中崩溃 错误是: --------------------------- Debugger Exception Notification --------------------------- Project TestCompile.exe raised exception class $C0000005 with me

我正在尝试编译一个64位的旧程序(Win7,delphixe7)。但是,我对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.

正如您所见,没有个人/第三方代码。所有这些都是用Delphi代码完成的。
DLL是FastMM(4.992/2016)软件包提供的DLL

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

更新:
这与存在调试信息有关(“Delphi编译器->链接”下的“映射文件”)

存储库中包含的预编译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,它不再崩溃


还报告了这一点:

是的,我可以继续执行,但我的问题不同。在@IanGoldby的问题中,FastMM在特定情况下不起作用。在我的例子中,FastMM根本不在默认/空项目上工作。这就像FastMM不是为64位设计的(但我不是这么说的!!显然它是为64位设计的-对于其他人来说)引用@davidheffernan-“是的,这非常令人沮丧,直到你意识到你的代码没有问题!”。我想我的设置有问题!是的,我理解-我只是想确保这是一个真正的错误,而不仅仅是FastMM中的一个偶然(正常)异常,否则不会对其运行产生不利影响。我无法重现您的问题。创建一个新的空白VCL应用程序button,TStringList.Create,将FULLDEBUGMODE添加到defines,将FastMM4添加到dpr使用中,将64位dll(来自FastMM repo的预编译文件夹)放入exe旁边的目录,调试应用程序。得到了泄漏对话框和带有调用堆栈的文本文件。我在使用64 dll时也遇到了同样的问题。当有一个映射文件时它会崩溃,你解决了问题吗?我还设法将问题缩小到“调试信息”(请参阅我最后的评论)。但是,我的结论是,当存在调试信息时,它会崩溃。你说的正好相反。您引用了一个旧的DLL(2015)。这意味着这个bug是一个回归?2.有一个地方可以下载DLL(我没有绝地武士)?3.我不敢相信我是唯一一个在数以百万计的Delphi 64位用户中有这个bug的人:)或者。。。。社区越来越小了。你不明白!在我的情况下,“调试信息”已启用。只有在我启用它时才会出现崩溃!!!!!默认项目(默认情况下禁用调试信息)不会出现崩溃:)奇怪,对吧?我是64位Delphi的早期采用者之一。我从不使用64位调试器。因为它太脆弱了。“因为它太脆弱了”-(作为经验法则),我们应该在发布3-5个版本(年)后使用Embarcadero版本(64位、fmx、vcl样式等)的技术。在最初的几年里,他们是不稳定的。我们希望柏林德尔福(Delphi Berlin)能改变这种情况(他们似乎已经修复了一长串的bug)