64ビット(Win7、Delphi XE7)の古いプログラムをコンパイルしようとしています。しかし、私はFastMMに問題があります。代わりにFastMM_FullDebugMode64.dllデバッグ情報(MAPファイル)が存在するときにFastMMが64ビットでクラッシュする
で、それがクラッシュしたリークレポートエラーを示すのである:
---------------------------
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)パッケージで提供されています。
32ビットで動作します。 64ビットでは、IDe(デバッガ)で実行するとプログラムがクラッシュします。私はプログラムをリセットすることしかできません(Ctrl + F2)。 IDEの外では、プログラムは動作します(FastMMはIDEの外で実行しているときにログを表示しないように設定しています)。
更新: これは、デバッグ情報( 'マップファイル'の 'Delphiコンパイラ - >リンク'の存在)と関係があります。
:http://stackoverflow.com/a/22685753/327083 –
たちがあればログが正しく機能していないこと、そのため、推測することができ
もこのことを報告しましたこのデバッガの例外によって実行を続けるだけですか? –
はい、私は実行を続けることができますが、私の問題は異なります。 @ IanGoldbyの質問では、FastMMは特定のケースでは機能していません。私のケースでは、FastMMはデフォルト/空のプロジェクトでAT ALLを使用していません。それはFastMMが64ビットで動作するようには設計されていなかったのですが(もちろん、これは言うまでもありません!64ビットで動作することは他にもあります) – Ampere