Как правильно понимать работу модуля отлова утечек памяти?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Как правильно понимать работу модуля отлова утечек памяти?

Сообщение Виталий » 03.11.2013 21:34:52

Всем доброго. Для выявления утечек памяти посредством SetHeapTraceOutput получил файлик трейса. Теперь хочу понять как посредством его найти место утечки.
Heap dump by heaptrc unit
11776 memory blocks allocated : 1899362/1952392
11769 memory blocks freed : 1899048/1952056
7 unfreed memory blocks : 314
True heap size : 262144
True free heap : 261616
Should be : 261360
Call trace for block $02B6C038 size 74
$00456A1B
$00429BDE
$004584D8
$BAADF00D
$BAADF00D
$BAADF00D
$BAADF00D
$BAADF00D
...
И еще 6 дырочек

Подскажите пожалуйста на что именно указывают описанные в нем адреса. и как их связать с исходником программы?
Виталий
новенький
 
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение zub » 03.11.2013 21:55:43

Проект надо собрать с отладочной информацией -g -gl и без -Xs, тогда будут не только адреса, но и имена модулей и номера строк
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение Виталий » 03.11.2013 22:22:46

Так и делаю. См. скрин.
то что выношу отладочную инфу в GDB отдельно не может повлиять?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Виталий
новенький
 
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение zub » 03.11.2013 22:34:12

да, -Xg тоже уберите - влияет
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение Виталий » 03.11.2013 22:45:15

О! Получил ожидаемое. Спасибо. :D
Виталий
новенький
 
Сообщения: 40
Зарегистрирован: 05.01.2013 22:33:11

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение VKB » 08.05.2014 11:16:58

Возник аналогичный вопрос.

Похоже есть ещё какое-то дополнительное сакральное знание...

Создаю в лазарусе (версия 1.2 для Win32, установка по умолчанию) новый проект (Простая программа):
Код: Выделить всё
program heap;

var
  a, b: pointer;

begin
  getmem(a,100);
  getmem(b,200);
  freemem(b);
  //freemem(a);
end.

Отмечаю галку -gh в параметрах проекта. -gl уже была по умолчанию, -Xs и -Xg не трогаю (по умолчанию и так выключены).Компилирую, получаю файл размером 86817 байт. Запускаю в командной строке. Он выводит
Код: Выделить всё
Heap dump by heaptrc unit
2 memory blocks allocated : 300/304
1 memory blocks freed     : 200/200
1 unfreed memory blocks : 100
True heap size : 131072 (128 used in System startup)
True free heap : 130768
Should be : 130776
Call trace for block $00096348 size 100
  $00407DC1
  $554C4C41
  $53524553
  $464F5250
  $3D454C49
  $445C3A43
  $6D75636F
  $73746E65
Пробовал то же самое собирать в командной строке `\lazarus\fpc\2.6.2\bin\i386-win32\ppc386.exe -gh -gl heap.lpr` - файл получается точно такой же.

Меня смущает то, что получаемый файл не зависит от наличия или отсутствия ключа "-Xs", то есть вероятно где-то ещё глобально эти символы отключены. Но от ключа -gl размер и адрес в строке "Call trace for block"зависит. При его отсутствии файл получается меньше (75369 байт) и первый адрес меняется на $000961E0.

Пробовал то же самое c версией 1.2 под Win64 - размер файла и адреса конечно другие, но суть та же. Подробной отладочной информации не выводит.
VKB
новенький
 
Сообщения: 33
Зарегистрирован: 07.09.2009 13:57:35

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение Vadim » 08.05.2014 12:50:25

VKB
Эта опция есть ещё в файле fpc.cfg. Она там по умолчанию задана.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как правильно понимать работу модуля отлова утечек памят

Сообщение VKB » 08.05.2014 15:55:28

Да, действительно в этом файле стояло -Xs (файл был только в директории с ppc386.exe, в локальной его не было). Закомментировал, но эффекта никакого нет. Может быть есть какой-нибудь явный ключ, отменяющий -Xs? Как узнать, с какими ключами была выполнена компиляция?
VKB
новенький
 
Сообщения: 33
Зарегистрирован: 07.09.2009 13:57:35


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru