Как подавить предупреждения valgrind по происхождению неинициализированных значений?
Valgrind расскажет вам о происхождении неинициализированных значений с опцией track-origins=yes
.
Я пытался подавить эти предупреждения, но проблема в том, что данные, основанные на неинициализированных значениях, могут распространяться повсюду, вызывая предупреждения в другом месте.
Решение будет подавлять происхождение неинициализированных данных. Как мне это сделать? Является ли это возможным? Кажется, что подавление файлов фильтрует только трассировку стека.
Причина, по которой я хочу, что OpenSSL повышает случайность с помощью неинициализированных значений с целью, и я хочу проверить сборку релиза с valgrind (поэтому -DPURIFY не является вариантом).
Ответы
Ответ 1
Мое первоначальное чтение вашего вопроса состоит в том, что вы можете быть в порядке с отключением всех неинициализированных ошибок значений, и в этом случае --undef-value-errors=no
будет делать трюк.
Если вы ищете что-то по частям, некоторые поспешные тесты, похоже, указывают на использование --gen-suppressions=yes
, а затем отвечая на y для соответствующих выходов и отбрасывая их в файл подавления, который работал для меня, когда вы играли с моим двоичным файлом openssl.
Кроме того, вы можете найти ответ на вопрос: Как вы сообщаете Valgrind о полном подавлении какого-либо файла.so? полезно.
Ответ 2
Решение будет подавлять происхождение неинициализированных данных. Как мне это сделать? Является ли это возможным? Кажется, что подавление файлов фильтрует только трассировку стека.
У меня была такая же проблема с OpenSSL. По словам Тома Хьюза в списке рассылки Valgrind, это невозможно. См. Шаблон подстановки уровня кадра, не соответствующий правилу подавления? ,
В моем случае я пытался использовать подстановочные знаки уровня кадра для подавления результатов в памяти, затронутых RAND_init_fips
(версия проблемы OpenSSL FIPS). Это не работает, хотя мы хотели бы, чтобы он работал:
{
RAND_init_fips_1
Memcheck:Cond
...
fun:RAND_init_fips
...
}
{
RAND_init_fips_2
Memcheck:Value8
...
fun:RAND_init_fips
...
}
{
RAND_init_fips_3
Memcheck:Value4
...
fun:RAND_init_fips
...
}
Ответ 3
Попробуйте добавить это в файл поддержки.
{
cond
Memcheck:Cond
...
fun:*
...
}
{
value8
Memcheck:Value8
...
fun:*
...
}
{
value4
Memcheck:Value4
...
fun:*
...
}
Например, если ваш исполняемый файл - a.out
, создайте файл ./val.supp
с содержимым и запустите valgrind --suppressions=./val.supp ./a.out
.