Игнорировать часть кода с помощью valgrind — memcheck

Я использую модули massif, sgcheck и memcheck valgrind для проверки проекта c/c++. Я хотел бы знать, можно ли заставить valgrind игнорировать часть кода. Когда я запускаю его в своем проекте, у меня появляется что-то вроде 248 различных «ложных» ошибок, сгенерированных вызовом opencv. Это нормально, но в настоящее время я не могу избежать этого вызова, поэтому я хотел бы, чтобы valgrind игнорировал эту часть кода.

Я пытаюсь сгенерировать файл, чтобы «подавить» его ошибку, добавив --gen-suppressions=all --log-file=valgrind.out в свою командную строку, чтобы сгенерировать файл, чтобы игнорировать ошибку. Но есть некоторый «ручной процесс», например, удаление блока 248 в файле журнала, и я хотел бы избежать этого.

Итак: знаете ли вы, есть ли способ (немного похожий на ifdef или ifndef, может быть) заставить valgrind игнорировать часть кода?

Спасибо !


person Bastienm    schedule 11.01.2018    source источник
comment
Вы уверены, что эти ошибки ложны?   -  person user7860670    schedule 11.01.2018
comment
Я сказал ложь, потому что они верны, но в открытом резюме. И эта функция opencv используется только для отладки. Но на самом деле они верны, я это знаю и хотел бы их игнорировать   -  person Bastienm    schedule 11.01.2018
comment
Это не дубликат, потому что я попробовал опцию --suppression valgrind. Но в моем случае в выходном файле есть много вещей, которые нужно редактировать, и я хотел бы этого избежать. Вот почему я пытаюсь найти механизм, похожий на #ifdef в С++, чтобы игнорировать часть кода.   -  person Bastienm    schedule 11.01.2018
comment
@Bastienm Вместо того, чтобы добавлять решение на свой вопрос, опубликуйте его как ответ.   -  person Ken Wayne VanderLinde    schedule 11.01.2018
comment
@KenWayneVanderLinde: хорошо, я изменил это.   -  person Bastienm    schedule 11.01.2018


Ответы (1)


Наконец, я сделал это, используя --gen-suppressions=all --log-file=valgrind.out :

  • Добавьте --gen-suppressions=all –log-file=valgrind_tmp.out в команду memcheck
  • sed '/==/ d' valgrind_tmp.out > valgrind.out удалить все ненужные строки
  • теперь запустите memcheck с --suppressions=valgrind.out

Поэтому я не нашел способа заставить memcheck избегать определенной части кода, я просто фильтрую вывод ошибок.

person Bastienm    schedule 11.01.2018