2016-11-15 7 views
1

64 비트 (Win7, Delphi XE7) 용 이전 프로그램을 컴파일하려고합니다. 그러나 FastMM에 문제가 있습니다. 대신이 FastMM_FullDebugMode64.dll디버그 정보 (MAP 파일)가있을 때 FastMM이 64 비트에서 충돌합니다.

에 충돌 누출 보고서를 보여주는의

오류 :

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. 

:

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

enter image description here

이 문제를 재현하는 데 필요한 코드

보시다시피 개인/제 3 자 코드는 없습니다. 모두 Delphi 코드로 완성됩니다.
DLL은 FastMM (4.992/2016) 패키지와 함께 제공되는 DLL입니다.

32 비트에서 작동합니다. 64 비트에서 IDe (디버거)를 실행하면 프로그램이 중단됩니다. 나는 단지 프로그램을 재설정 할 수있다 (Ctrl + F2). IDE 외부에서는 프로그램이 작동합니다 (FastMM은 IDE 외부에서 실행될 때 로그를 표시하지 않도록 구성됩니다).

업데이트 : 이것은 '델파이 컴파일러 -> 링크'아래의 디버그 정보 ('맵 파일')와 관련이 있습니다.

+0

내가하지만, 최근이에 댓글을 알고 : http://stackoverflow.com/a/22685753/327083 –

+0

우리는, 따라서 추정 할 수 로깅이 제대로 경우 작동하지 않습니다

또한이보고 이 디버거 예외를 통해 실행을 계속할 수 있습니까? –

+1

예, 계속 진행할 수 있지만 문제는 다릅니다. @ IanGoldby의 질문에서 FastMM은 특정 경우에 작동하지 않습니다. 필자의 경우 FastMM은 기본/빈 프로젝트에서 모두 작동하지 않습니다. 그것은 FastMM이 64 비트에서 작동하도록 설계되지 않은 것과 같습니다. (그러나 이것은 말하지 않습니다! 분명히 64 비트에서 작동합니다 - 다른 사람들을 위해) – Ampere

답변

1

리포지토리에 들어있는 미리 컴파일 된 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

+0

나는 또한 문제를 '디버그 정보 (내 마지막 코멘트를 참조하십시오) 좁혀 관리. 그러나, 내 결론은 디버그 정보가있을 때 충돌이 발생한다는 것입니다. 당신은 그 반대입니다. – Ampere

+0

1. 이전 DLL (2015)에 대한 참조를 만듭니다. 이것은이 버그가 회귀라는 것을 의미합니까? 2. DLL을 다운로드 할 수있는 곳 (Jedi가 없음)이 있습니까? 3. 나는 델파이 64 비트 사용자 중 수백만 명의 사람들이이 버그를 가지고있는 유일한 사람이라고 믿을 수 없다 : 또는 .... 커뮤니티는 더 작고 작다. – Ampere

+0

1. 나는 이것을 재현하기 위해 저장소와 함께 제공된 DLL을 사용했다. 2. 직접 컴파일하십시오. JCL은 오픈 소스입니다. 3. 아마도 아무도 디버그 빌드에서 디버그 정보를 사용하지 않고 미리 컴파일 된 DLL을 사용했습니다.) –