存在调试信息(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,它不再崩溃了。
我正在尝试为 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,它不再崩溃了。