По-видимому, необходимо включать отдельную запись подавления для каждого типа ошибки (Cond, Value4, Param и т. Д.). Но, основываясь на моем тестировании с использованием valgrind-3.6.0.SVN-Debian, я считаю, что вы можете использовать следующую упрощенную форму для каждого типа ошибки ...
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
obj:/path/to/library/thelibrary.so.*
...
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
...
obj:/path/to/library/thelibrary.so.*
...
}
Три точки называются подстановочными знаками на уровне кадра в документах Valgrind. Они соответствуют нулю или нескольким кадрам в стеке вызовов. Другими словами, вы используете их, когда не имеет значения, кто вызвал библиотеку или какие функции впоследствии вызывает библиотека .
Иногда ошибки включают фреймы "obj:", а иногда они используют только фреймы "fun:". Как правило, это зависит от того, включена ли эта функция в таблицу символов библиотеки. Если цель состоит в том, чтобы исключить всю библиотеку, может работать лучше, если библиотека не содержит символов , так что вы можете исключить ее на основе имени файла библиотеки вместо необходимости создавать отдельные подавления для каждого вызова функции в библиотека. Надеюсь, Valgrind достаточно умен, чтобы подавлять ошибки, основанные на имени файла библиотеки, даже когда он знает имя функции, но я не проверял это.
Если вам нужно добавить подавления, основанные на отдельных функциях в библиотеке, вы сможете использовать ту же форму ...
{
<insert_a_suppression_name_here>
Memcheck:Leak
...
fun:the_name_of_the_function
...
}
Примечание. Вы можете включить --gen-suppressions=all
в командной строке valgrind, чтобы увидеть точную форму и имена (включая любые искажения в C ++), необходимые для подавления каждой ошибки. Вы можете использовать этот вывод в качестве шаблона для ваших записей подавления - в котором вы обычно хотите заменить большинство строк на ...
, чтобы упростить процесс подавления всех ошибок, которые могут возникнуть в связи с конкретной библиотекой или вызовом функции .
Примечание: <insert_a_suppression_name_here>
- это заполнитель, в котором вы можете ввести любой описательный текст, который вы хотите. Требуется не быть пустым.