2016-11-15 4 views
1

Je suis en train de compiler un ancien programme pour 64 bits (Win7, Delphi XE7). Cependant, j'ai un problème avec FastMM. Au lieu de montrer le rapport de fuite, il se bloque dans FastMM_FullDebugMode64.dllFastMM se bloque sur 64 bits lorsque les informations de débogage (fichier MAP) sont présentes

L'erreur est:

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

enter image description here

C'est le code nécessaire pour reproduire le problème:

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. 

Comme vous pouvez le voir il n'y a pas de code personnel/3ème partie. Tout est fait avec du code Delphi.
La DLL est celle fournie avec le package FastMM (4.992/2016).

Cela fonctionne sur 32 bits. Sur 64 bits, il bloque le programme si je cours sous IDe (débogueur). Je peux seulement réinitialiser le programme (ctrl + f2). En dehors de l'IDE, le programme fonctionne (FastMM est configuré pour ne pas afficher le journal lorsqu'il est exécuté en dehors de l'EDI).

Mise à jour: Cela a quelque chose à voir avec la présence d'informations de débogage ('Fichier de carte' sous 'Compilateur Delphi -> Liaison').

+0

Je sais que vous avez parlé de cela récemment, mais: http://stackoverflow.com/a/22685753/327083 –

+0

Peut-on présumer, par conséquent, que l'enregistrement ne fonctionne pas correctement si vous continuez simplement l'exécution à travers cette exception de débogueur? –

+1

Oui, je peux continuer l'exécution MAIS mon problème est différent. Dans la question de @ IanGoldby, FastMM ne fonctionne pas dans un cas spécifique. Dans mon cas FastMM ne fonctionne pas du tout sur un projet par défaut/vide. C'est comme si FastMM n'avait pas été conçu pour fonctionner sur 64 bits (MAIS je ne dis pas ça !! Bien évidemment cela fonctionne sur 64 bits - pour d'autres) – Ampere

Répondre

1

Il semble que la DLL 64 bits précompilée contenue dans le référentiel soit obsolète et ne reflète pas les modifications effectuées dans le passé.

Un incident potentiel s'est produit lorsque l'exécutable ne contient pas d'informations de débogage.

De 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.) 

recompilé la DLL à l'aide d'un JCL assez récent et il ne plante plus.

a également rapporté ceci: https://github.com/pleriche/FastMM4/issues/27

+0

J'ai également réussi à réduire le problème à «déboguer des informations (s'il vous plaît voir mon dernier commentaire). Cependant, ma conclusion est qu'il se bloque lorsque l'information de débogage est présente. Vous dites le contraire. – Ampere

+0

1. Vous faites référence à une ancienne DLL (2015). Cela signifie que ce bug est une régression? 2. Il y a un endroit d'où je peux télécharger la DLL (je n'ai pas de Jedi)? 3. Je ne peux pas croire que je suis celui qui a ce bug dans des millions d'utilisateurs de Delphi 64 bits :) ou .... est la communauté de plus en plus petite. – Ampere

+0

1. J'ai utilisé la DLL fournie avec le référentiel pour le reproduire. 2. Recompilez-le vous-même. JCL est open source. 3. Probablement personne n'a désactivé les informations de débogage dans une version de débogage et utilise la DLL précompilée;) –