На моей работе мне нужно профилировать некоторое программное обеспечение и получить некоторые файлы подавления, которые были записаны неизвестным временем назад. Один из этих файлов (logging.supp) используется для подавления ошибок регистрации.
Я предполагаю, что регистрация и некоторые другие части изменяются между генерацией файла подавления и моим профилированием.
Насколько я понимаю, valgrind использует стек для определения необходимости устранения утечки.
Нужно ли восстанавливать файлы подавления или есть способ что-то изменить в файлах?
Пример записи подавления:
{
<insert_a_suppression_name_here>
Memcheck:Leak
fun:_Znwj
fun:_ZN3tsd6common5types8SmartPtrINS0_7logging19LogSimpleDateFormatEEaSEPS4_
fun:_ZN3tsd6common7logging23LogDatePatternConverterC1ESt6vectorISsSaISsEE
fun:_ZN3tsd6common7logging16LogPatternParser15createConverterEcSt6vectorISsSaISsEE
fun:_ZN3tsd6common7logging16LogPatternParser17finalizeConverterEcSsiSsNS0_5types8SmartPtrINS1_17LogFormattingInfoEEERSt6vectorINS4_INS1_19LogPatternConverterEEESaIS9_EERS7_IS6_SaIS6_EE
fun:_ZN3tsd6common7logging16LogPatternParser5parseESsRSt6vectorINS0_5types8SmartPtrINS1_19LogPatternConverterEEESaIS7_EERS3_INS5_INS1_17LogFormattingInfoEEESaISC_EE
fun:_ZN3tsd6common7logging16PatternLogLayout15activateOptionsEv
fun:_ZN3tsd6common7logging16PatternLogLayoutC1ERKSs
fun:_ZN3tsd6common7logging14LoggingManager4initENS0_5types8SmartPtrINS1_23LogManagerConfigurationEEE
fun:_ZN3tsd6common7logging14LoggingManager4initERKSsS4_
fun:_ZN3tsd6common7logging14LoggingManager9getLoggerERKSs
fun:_ZN3tsd6common7logging6LoggerC1ERKSs
}
Я нашел и понравился этот ответ:
https://stackoverflow.com/a/14781867/2764334
Могу ли я использовать точки также, чтобы игнорировать некоторые функции, которые являются записями промежуточного стека?
Как генерируются имена функций? для меня это выглядит как _Znjw или _ZN3tsd это имя для главного?
Можете ли вы помочь мне найти документацию по вышеуказанным вопросам?
Могу ли я использовать точки также, чтобы игнорировать некоторые функции, которые являются записями промежуточного стека?
Да.
Как генерируются имена функций?
Это искаженные имена функций, сгенерированные компилятором; они содержат пространство имен и / или область видимости, имя функции и аргументы. Ты можешь использовать c++filt
разобрать их.
для меня это выглядит как _Znjw или _ZN3tsd это имя для главного?
_Znjw
является operator new(unsigned)
, _ZN3tsd
это префикс для вещей в namespace tsd
,
Можете ли вы помочь мне найти документацию по вышеуказанным вопросам?
Файлы подавления Valgrind задокументированы Вот. Похоже, формат искажения GNU официально не задокументирован; используйте Google и возьмите все, что вы найдете, с небольшим количеством соли (при условии, что вы не хотите перемещаться по исходному коду компилятора, чтобы увидеть, как генерируются имена).
Других решений пока нет …