Size: a a a

2020 June 03

K

Kitnerboy Redoubt in pro.cxx
Здравствуйте.
Есть один valgrind, и я не могу понять, почему он не показывает источники вызова malloc.
На всех примерах использования и в мануале вижу такие примеры вывода:
8 bytes in 1 blocks are definitely lost in loss record 1 of 14
  at 0x........: malloc (vg_replace_malloc.c:...)
  by 0x........: mk (leak-tree.c:11)
  by 0x........: main (leak-tree.c:39)

Сам же на простой программе, которая выделяет память и потом не освобождает получаю совершенно неподробный вывод, указано только расположение самого подмененного malloc :
==621== 
==621== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==621==    at 0x4815BEC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==621==

Перепроверял наличие -g флага при сборке, пересобирал последнюю версию valgrind.
При этом другие ошибки вроде разыменование неинициализированного указателя указываются вместе со строкой, на которой оно было вызвано.
Работать всё это должно на arm системе, может из-за этого проблема?
источник

IZ

Ilia Zviagin in pro.cxx
Kitnerboy Redoubt
Здравствуйте.
Есть один valgrind, и я не могу понять, почему он не показывает источники вызова malloc.
На всех примерах использования и в мануале вижу такие примеры вывода:
8 bytes in 1 blocks are definitely lost in loss record 1 of 14
  at 0x........: malloc (vg_replace_malloc.c:...)
  by 0x........: mk (leak-tree.c:11)
  by 0x........: main (leak-tree.c:39)

Сам же на простой программе, которая выделяет память и потом не освобождает получаю совершенно неподробный вывод, указано только расположение самого подмененного malloc :
==621== 
==621== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==621==    at 0x4815BEC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==621==

Перепроверял наличие -g флага при сборке, пересобирал последнюю версию valgrind.
При этом другие ошибки вроде разыменование неинициализированного указателя указываются вместе со строкой, на которой оно было вызвано.
Работать всё это должно на arm системе, может из-за этого проблема?
Другие блоки потерянные есть?
источник

K

Kitnerboy Redoubt in pro.cxx
Ilia Zviagin
Другие блоки потерянные есть?
Есть большая программа, которая течёт, в ней несколько мест, где теряются выделенные данные. Но там я сразу столкнулся с тем, что источники вызова malloс не отображаются. Для вычленения причин, я написал маленькую программу, которая только и делает, что выделяет кусок памяти и завершается.
источник

IZ

Ilia Zviagin in pro.cxx
Kitnerboy Redoubt
Есть большая программа, которая течёт, в ней несколько мест, где теряются выделенные данные. Но там я сразу столкнулся с тем, что источники вызова malloс не отображаются. Для вычленения причин, я написал маленькую программу, которая только и делает, что выделяет кусок памяти и завершается.
Ну не знаю...
источник

K

Kitnerboy Redoubt in pro.cxx
Вот и я не знаю, и мало того - не нахожу подобных проблем у других. Обычно у людей не достаёт ключа -g или оптимизация слишком сильная.
источник

VS

Vladimir Suisei in pro.cxx
Kitnerboy Redoubt
Здравствуйте.
Есть один valgrind, и я не могу понять, почему он не показывает источники вызова malloc.
На всех примерах использования и в мануале вижу такие примеры вывода:
8 bytes in 1 blocks are definitely lost in loss record 1 of 14
  at 0x........: malloc (vg_replace_malloc.c:...)
  by 0x........: mk (leak-tree.c:11)
  by 0x........: main (leak-tree.c:39)

Сам же на простой программе, которая выделяет память и потом не освобождает получаю совершенно неподробный вывод, указано только расположение самого подмененного malloc :
==621== 
==621== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==621==    at 0x4815BEC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==621==

Перепроверял наличие -g флага при сборке, пересобирал последнюю версию valgrind.
При этом другие ошибки вроде разыменование неинициализированного указателя указываются вместе со строкой, на которой оно было вызвано.
Работать всё это должно на arm системе, может из-за этого проблема?
А если собирать на своем пк, все ок?
источник

IZ

Ilia Zviagin in pro.cxx
Kitnerboy Redoubt
Здравствуйте.
Есть один valgrind, и я не могу понять, почему он не показывает источники вызова malloc.
На всех примерах использования и в мануале вижу такие примеры вывода:
8 bytes in 1 blocks are definitely lost in loss record 1 of 14
  at 0x........: malloc (vg_replace_malloc.c:...)
  by 0x........: mk (leak-tree.c:11)
  by 0x........: main (leak-tree.c:39)

Сам же на простой программе, которая выделяет память и потом не освобождает получаю совершенно неподробный вывод, указано только расположение самого подмененного malloc :
==621== 
==621== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==621==    at 0x4815BEC: malloc (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==621==

Перепроверял наличие -g флага при сборке, пересобирал последнюю версию valgrind.
При этом другие ошибки вроде разыменование неинициализированного указателя указываются вместе со строкой, на которой оно было вызвано.
Работать всё это должно на arm системе, может из-за этого проблема?
Фактически это означает что кто-то выделил эту память, а кто - он не знает.

Я бы предложил тебе лечить те утечки, которые известны, где, и , возможно, ты починишь косвенно и те утечки, что неизвестны.
источник

K

Kitnerboy Redoubt in pro.cxx
Ilia Zviagin
Фактически это означает что кто-то выделил эту память, а кто - он не знает.

Я бы предложил тебе лечить те утечки, которые известны, где, и , возможно, ты починишь косвенно и те утечки, что неизвестны.
Ну так то я и без valgrind мог сказать, что кто-то выделил память и профукал. =)
источник

IZ

Ilia Zviagin in pro.cxx
Kitnerboy Redoubt
Вот и я не знаю, и мало того - не нахожу подобных проблем у других. Обычно у людей не достаёт ключа -g или оптимизация слишком сильная.
Такое в принципе может быть, когда при создании одного объекта динамически из неинструментированного кода вызывается malloc ещё раз, и этот блок тоже репортится как не освобождённый.
источник

K

Kitnerboy Redoubt in pro.cxx
Известных утечек нет, потому я и использовал профайлер. Видимо, я где-то юзаю либу неверно, но искать это нелегко без профайлера.
источник

VS

Vladimir Suisei in pro.cxx
Kitnerboy Redoubt
Известных утечек нет, потому я и использовал профайлер. Видимо, я где-то юзаю либу неверно, но искать это нелегко без профайлера.
Так а если под другую машину код собирать, валгринд тоже не показывает ничего?
источник

VS

Vladimir Suisei in pro.cxx
Флаги валгринда можно еще на максимальный выхлоп поставить, если не сделал
источник

VS

Vladimir Suisei in pro.cxx
Можешь еще попробовать гццшный санитайзер подрубить, может он лучше покажет
источник

K

Kitnerboy Redoubt in pro.cxx
На ПК valgrind на этом же коде выдаёт то, что я и хочу увидеть.
==31451== 
==31451== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==31451==    at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==31451==    by 0x400667: main (in /home/alexs/src/tests/memory_leak/a.out)
==31451==

Вот только как этот факт использовать - непонятно.
источник

K

Kitnerboy Redoubt in pro.cxx
Нет номера строки, но это я собрал без -g
источник

VS

Vladimir Suisei in pro.cxx
Kitnerboy Redoubt
Нет номера строки, но это я собрал без -g
Можно еще попробовать не запускать под валгриндом, а запустить и заттачится позднее
источник

TS

Till Schneider in pro.cxx
Kitnerboy Redoubt
На ПК valgrind на этом же коде выдаёт то, что я и хочу увидеть.
==31451== 
==31451== 4,000 bytes in 1 blocks are definitely lost in loss record 1 of 1
==31451==    at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==31451==    by 0x400667: main (in /home/alexs/src/tests/memory_leak/a.out)
==31451==

Вот только как этот факт использовать - непонятно.
использование валгринда обязательно?! есть asan, ubsan еще =)
источник

IS

Iskander Saitbatalov in pro.cxx
На крайняк можно LeakChek заюзать
источник

K

Kitnerboy Redoubt in pro.cxx
Till Schneider
использование валгринда обязательно?! есть asan, ubsan еще =)
Начал с наиболее популярного.
источник

TS

Till Schneider in pro.cxx
memory leak - может быть вызван и UB =)
источник