Valgrind - Файл подавления слишком общий?
Я новичок в valgrind, и первое, что я заметил, было то, что стандартная библиотека C в OS X El Capitan, похоже, теряет память (возможно, потеряна). После небольшого прочтения это не так, и можно исключить системную библиотеку из сводки утечки valgrind с помощью файла подавления.
Я сгенерировал один такой файл подавления (запустив упрощенную программу) и добавив ошибки в файл подавления. Это выглядит так:
osx_el_capitan_c_lib.supp
{
<osx_el_capitan_c_lib>
Memcheck:Leak
match-leak-kinds: possible
fun:malloc_zone_malloc
fun:_objc_copyClassNamesForImage
fun:_ZL9protocolsv
fun:_Z9readClassP10objc_classbb
fun:gc_init
fun:_ZL33objc_initializeClassPair_internalP10objc_classPKcS0_S0_
fun:layout_string_create
fun:_ZL12realizeClassP10objc_class
fun:_ZL22copySwiftV1MangledNamePKcb
fun:_ZL22copySwiftV1MangledNamePKcb
fun:_ZL22copySwiftV1MangledNamePKcb
fun:_ZL22copySwiftV1MangledNamePKcb
}
Теперь у меня есть несколько вопросов:
- Возможно ли, что этот файл будет подавлять утечки моего реального кода (не системных библиотек)? Я проверил немного с определенно утечкой / не утечкой кода, и, кажется, работает нормально. Но как я могу быть уверен?
- Выходной ток по умолчанию выглядит следующим образом (определенно не протекает):
== 37004 == Memcheck, детектор ошибок памяти ==37004== Copyright (C) 2002-2015 и GNU GPL'd, Джулиан Сьюард и соавт. ==37004== Использование Valgrind-3.11.0 и LibVEX; перезапустить с -h для получения информации об авторских правах == 37004 == Команда: ./val.o ==37004== ==37004== ==37004== РЕЗЮМЕ КАРТЫ: ==37004== используется на выходе: 22 100 байт в 187 блоках == 37004 == общее использование кучи: 271 выделение, 84 освобождения, выделение 28 340 байт == 37004 == == 37004 == РЕЗЮМЕ УТЕЧКИ: ==37004== определенно потеряно: 0 байтов в 0 блоках == 37004 == косвенно потеряно: 0 байтов в 0 блоках == 37004 == возможно потеряно: 0 байтов в 0 блоках == 37004 == все еще достижимо: 0 байтов в 0 блоках == 37004 == подавлено: 22 100 байт в 187 блоках == 37004 == == 37004 == Для подсчета обнаруженных и подавленных ошибок, перезапустите с: -v ==37004== РЕЗЮМЕ ОШИБОК: 0 ошибок из 0 контекстов (исключено: 18 из 18)
Как вы можете видеть, файл подавления пока работает довольно хорошо (байты не отображаются как потерянные и т. Д.). Но на файл кучи не влияет файл подавления (allocs
/mallocs
показаны - они происходят за пределами моего кода), а сводная утечка показывает, что это скрытое поле. Есть ли способ, которым я могу отключить это поле (флаг или что-то) и подавить (allocs
/mallocs
вне моего кода) в резюме кучи, а?