Ответ 1
У Free Pascal есть аналогичная функция. В конце программы вызовите DumpHeap
или включите параметр heaptrc в настройках проекта Lazarus. Выходной файл можно установить с помощью метода SetHeapTraceOutput
. Оба метода находятся в модуле heaptrc
, который должен быть первым в проекте (для захвата от начала).
Дополнительная информация:
- http://www.freepascal.org/docs-html/rtl/heaptrc/usage.html
- http://www.freepascal.org/docs-html/rtl/heaptrc/environment.html
Визуализация утечки: пакет Lazarus "LeakView" представляет содержимое выходного файла трассировки кучи в древовидном представлении. Он включен в установку по умолчанию и доступен после восстановления IDE. (еще не проверенный мной)
// By default information is written to standard output,
// this function allows you to redirect the information to a file
SetHeapTraceOutput('heaptrace.log');
// normally the heap dump will be written automatically at the end,
// but can also be written on demand any time
DumpHeap;
Результат выглядит следующим образом:
C:\path\to\Demo.exe
Heap dump by heaptrc unit
244 memory blocks allocated : 8305/9080
241 memory blocks freed : 8237/9000
3 unfreed memory blocks : 68
True heap size : 458752
True free heap : 458288
Should be : 458480
Call trace for block $0010CE58 size 28
$0044ACCB TIDTHREADSAFE__CREATE, line 226 of C:/path/to/indy-10.5.8.tiburon/Lib/Core/IdThreadSafe.pas
$00444245 IDTHREAD_init, line 641 of C:/path/to/indy-10.5.8.tiburon/Lib/Core/IdThread.pas
$00409D74
$0040E1A1
...
(протестирован с Free Pascal 2.6.0)