[fpc-pascal] fpWeb: How can I use heaptrc in standalone mode?
Marcos Douglas B. Santos
md at delfire.net
Mon May 7 22:13:28 CEST 2018
On Sun, May 6, 2018 at 5:44 PM, Marcos Douglas B. Santos <md at delfire.net> wrote:
> On Sat, May 5, 2018 at 11:51 AM, Michael Van Canneyt
> <michael at freepascal.org> wrote:
>>
>>
>> On Sat, 5 May 2018, Marcos Douglas B. Santos wrote:
>>
>>> I'm using fpWeb in standalone mode (fphttpapp unit) to develop and debug.
>>> I would like to see the heaptrc log in the end, as we can do in normal
>>> desktop applications.
>>>
>>> So, in one route I create an object and don't release it to simulate a
>>> memleak.
>>>
>>> I've tried to set heaptrc.SetHeapTraceOutput('log.txt'). The app
>>> creates the file, but there is no log there.
>>
>>
>> This is definitely necessary.
>>
>>>
>>> I've tried to execute using F9 IDE and by command-line too.
>>> I think the problem is that we need to kill the server (Ctrl+C) and,
>>> because that, no log is created.
>>>
>>> So, how can I see the log?
>>
>>
>> Create a call that calls Application.Terminate.
>
> Michael,
>
> I believe there is a memleak but I couldn't found.
> I've just created a route that calls Application.Terminate and I got this:
>
> ===BEGIN===
> Heap dump by heaptrc unit
> 387 memory blocks allocated : 18658/19944
> 385 memory blocks freed : 18626/19912
> 2 unfreed memory blocks : 32
> True heap size : 196608 (96 used in System startup)
> True free heap : 196320
> Should be : 196352
> Call trace for block $034CA470 size 16
> $0042D3C1
> $00438926
> $004375AA
> $00437268
> $004265FB
> $BAADF00D
> $BAADF00D
> $BAADF00D
> Call trace for block $034CA410 size 16
> $0042CE3B
> $0042D3C1
> $00438926
> $004375AA
> $00437268
> $004265FB
> $BAADF00D
> $BAADF00D
>
> ===END===
>
>
> Here is my test program:
>
> ===BEGIN===
> program demo;
>
> {$define STANDALONE}
>
> uses
> SysUtils,
> httpdefs, httproute,
> {$ifdef STANDALONE}
> fphttpapp,
> {$endif}
> {$ifdef FCGI}
> fpfcgi,
> {$endif}
> IniFiles;
>
> {$ifdef STANDALONE}
> procedure TerminateCallBack({%H-}ARequest: TRequest; {%H-}AResponse: TResponse);
> begin
> Application.Terminate;
> end;
>
> procedure ConfigureStandalone;
> begin
> heaptrc.SetHeapTraceOutput('log.txt');
> heaptrc.GlobalSkipIfNoLeaks := True;
> heaptrc.HaltOnError := False;
> with TIniFile.Create('demo.ini') do
> try
> Application.Port := ReadInteger('Standalone','Port',8080);
> finally
> Free;
> end;
> HTTPRouter.RegisterRoute('quit', rmAll, @TerminateCallBack, True);
> end;
> {$endif}
>
> begin
> {$ifdef STANDALONE}
> ConfigureStandalone;
> {$endif}
> Application.Initialize;
> Application.Run;
> end.
>
> ===END===
>
> My environment is: Lazarus 1.8.3 r57764 FPC 3.0.4 i386-win32-win32/win64
>
> Best regards,
> Marcos Douglas
Michael,
Would you want that I open a issue for it?
Regards,
Marcos Douglas
More information about the fpc-pascal
mailing list