gerekli seçenekleri ayarlayın: buradan,
https://sourceforge.net/projects/fastmm/
veya daha iyi, Aryok 'The sayesinde gelen FastMM tam sürümünü indirin son Delphi sürümlerinde bir hata. Ben sadece bu yeni ücretsiz Delphi 10.1 Starter'da kontrol ettim ve açıkladığınız gibi davranıyor - ama hiçbir RTL kaynağı sağlamadığı için tam sebebi kontrol edemiyorum.
Delphi XE2'de beklendiği gibi davranır: Görev-modal iletişim kutusunu oluşturur ve aynen Sertak tarafından açıklandığı gibi tepki vermenizi bekler.
Delphi 10.1'de sızıntı gerçekten konsol penceresine bildirilir, ancak kullanıcı dikkatini çekmek için program durdurulmaz. Bu, hem bu nedenle hem de komut programlarındaki konsol programlarının olası kullanımı için zayıf bir çözümdür (CMD veya PS komut dosyaları bu mesajı "anlayamayacak" ve bunun yanlış çıktısı ile karıştırılmasına ve ileri aşama programlarının başarısız olmasına neden olabilir.
Bence, Delphi 10.0 üzerinden regresyon tipi hata raporunu açmalısın - ama 10.2 sürümüne kadar düzelteceklerini sanmıyorum.
Ayrıca uygulamanızı Delphi-forked bellek yöneticisinden özgün olana değiştirdim ve sonra hatalı davranış geri döndürüldü: program ileti kutusunu görüntüledi ve IDE'ye çıkmadan önce onu reddetene kadar bekledim.
Şu anda Delphi çatalı yerine belirtilen orijinal bellek yöneticisini kullanmanızı öneririm. http://github.com/pleriche/FastMM4 Sen Delphi Git istemcisi kullanabilir veya bağımsız bir kendin güncel tutmak veya tek seferde kodu indirip size kalmış, güncellenmesi durdurabilir de
program Project1;
{$APPTYPE CONSOLE}
uses
FastMM4,
System.Classes,
System.SysUtils;
...
orijinal bellek yöneticisi bulunur.
onun kod alakalı tırnak gibidir:
{$ifdef LogErrorsToFile}
{Set the message footer}
LMsgPtr := AppendStringToBuffer(LeakMessageFooter, LMsgPtr, Length(LeakMessageFooter));
{Append the message to the memory errors file}
AppendEventLog(@LLeakMessage[0], UIntPtr(LMsgPtr) - UIntPtr(@LLeakMessage[1]));
{$else}
{Set the message footer}
AppendStringToBuffer(LeakMessageFooter, LMsgPtr, Length(LeakMessageFooter));
{$endif}
{$ifdef UseOutputDebugString}
OutputDebugStringA(LLeakMessage);
{$endif}
{$ifndef NoMessageBoxes}
{Show the message}
AppendStringToModuleName(LeakMessageTitle, LMessageTitleBuffer);
ShowMessageBox(LLeakMessage, LMessageTitleBuffer);
{$endif}
end;
end;
{$endif}
end;
ve
{Shows a message box if the program is not showing one already.}
procedure ShowMessageBox(AText, ACaption: PAnsiChar);
begin
if (not ShowingMessageBox) and (not SuppressMessageBoxes) then
begin
ShowingMessageBox := True;
MessageBoxA(0, AText, ACaption,
MB_OK or MB_ICONERROR or MB_TASKMODAL or MB_DEFAULT_DESKTOP_ONLY);
ShowingMessageBox := False;
end;
end;
Bu kod masaüstü Windows üzerinde yürütülüyor bağlıdır, bu yüzden belki Embarcadero buna çapraz yapmak için "düzeltmek" için çalıştı -platform. Ancak bunu yaptıklarını Windows konsolunda bozdular.
Ayrıca, diğer günlüğe kaydetme formlarını eklemeyi de düşünebilirsiniz - dosyaya ve/veya Windows Hata Ayıklama Dizeleri içine. Modal penceresi kadar dikkat çekici olmayacaklardı, ama en azından bilgiyi nereye saklayacaklarını bilseydiniz, bilgiyi saklamanıza yardımcı olacaklardı.
Programı önceden açılmış bir komut penceresinde, IDE'de değil, çalıştırın. –
*** "AutoConsole" birimimi *** deneyebilirsiniz, buraya bakın: http://rvelthuis.blogspot.de/2016/07/new-velthuisautoconsole-unit.html. Sadece konsol programınıza ekleyin. –
"system.end" üzerinde bir kesme noktası ekleyin. –