leakview/ru
│
English (en) │
русский (ru) │
Leakview позволяет быстро перемещаться по отчетам об утечках HeapTrc.
Использование
Утилита Leakview доступна в среде IDE в разделе View / Leaks and Traces (Вид / Утечки памяти и стек вызовов).
Leakview читает вывод heaptrc. Чтобы это работало, вам нужно включить heaptrc в вашем коде:
Никогда не включайте heaptrc в свой раздел uses вручную. Это делается компилятором неявно, если указано -gh
Включение heaptrc в Lazarus
Чтобы включить это в вашем проекте Lazarus: перейдите в Project Options/Compiler Options/Debugging (Параметры проекта/Параметры компилятора/Отладка) и в разделе Other debugging info (Прочая отладочная информация) включите Use Heaptrc unit (check for mem-leaks) (-gh) (Использовать модуль Heaptrc (проверка на наличие утечек памяти) (-gh))
Чтобы получить значимые результаты heaptrc с описанием строк кода, а не только с адресами ассемблера, перейдите в Tools/Options/Debugger/general (Сервис/Параметры/Отладчик/Общие) и задайте отладчик.
Затем вы можете позволить программе записывать вывод модуля heaptrc в файл. Добавьте следующие фрагменты кода в свой .lpr в начале кода, чтобы перенаправить вывод heaptrc в файл:
{$DEFINE debug} //сделайте это здесь, или вы можете определить -dDEBUG в Project Options/Compiler Options/Custom Options (Параметры проекта/Параметры компилятора/Параметры пользователя), то есть в режиме сборки, чтобы вы могли настроить отладку с утечкой и режим сборки по умолчанию без него
uses
...
{$IFDEF debug}
, SysUtils
{$ENDIF}
...
begin
{$IFDEF DEBUG}
// Предположим, что ваш режим сборки задан как -dDEBUG в Project Options/Compiler Options/Custom Options при определении -gh
// Это позволяет избежать помех при запуске неотладочной сборки/сборки по умолчанию без -gh
// Задаем -gh вывод для пакета Leakview:
if FileExists('heap.trc') then
DeleteFile('heap.trc');
SetHeapTraceOutput('heap.trc');
{$ENDIF DEBUG}
...
end.
Включение heaptrc в FPC
В FPC вы можете указать -gh в параметрах компилятора в fpc.cfg или в командной строке.
Вы можете проверить, скомпилирован ли ваш двоичный файл с помощью heaptrace, следующим образом:
{$if Declared(UseHeapTrace)}...{$ifend}
Затем перенаправьте вывод heaptrc в файл (вместо стандартного вывода). Вы можете использовать код, аналогичный коду Lazarus, или, в качестве альтернативы, установить переменную среды, например на *nix:
export HEAPTRC="log=heap.trc"
или Windows:
set HEAPTRC="log=heap.trc"