Известны ли проблемы с ложными срабатываниями с Valgrind? - PullRequest
18 голосов
/ 28 апреля 2009

Есть ли какие-либо известные ложные срабатывания с Valgrind? Я получаю «Условный переход или перемещение зависит от неинициализированных значений» с помощью функции fmemopen, написания на C и компиляции с GCC. Могу ли я быть уверен, что это реально?

РЕДАКТИРОВАТЬ: Есть ли известные проблемы, которых нет в файлах подавления? Есть ли в программе некоторые вещи, которые на самом деле не являются ошибками, но Valgrind скажет, что они есть? Если есть известные проблемы, список будет хорош.

Ответы [ 3 ]

16 голосов
/ 28 апреля 2009

Да, с Valgrind есть ложные срабатывания, поэтому у него есть файлы подавления, например, для определенных версий glibc и gcc. Ложные срабатывания могут возникнуть, если вы используете более старый valgrind с более новыми gcc и glibc, т.е. valgrind 3.3 с glibc 2.9.

Сказав это, вы все равно должны изучить проблему и выяснить, действительно ли это ложный положительный результат (если это так, вы можете написать для него подавление самостоятельно) или это реальная ошибка ваша программа.

Нет быстрого и простого способа сказать, что здесь происходит, но в этом случае я подозреваю, что вы передаете неинициализированное значение из своего кода в код библиотеки. Попробуйте Valgrind вариант --track-origins=yes. Он покажет, откуда пришло неинициализированное значение. Если это ваш код, вероятно, вы должны его инициализировать. Если он находится внутри библиотеки, это может быть ложное срабатывание или, тем не менее, причиной могут быть неверные значения аргументов библиотечного вызова, поэтому проверьте их.

2 голосов
/ 29 апреля 2009

Valgrind поставляется с некоторым подавлением ошибок по умолчанию, но они ни в коем случае не охватывают все библиотеки.

Инструменты проверки ошибок обнаруживают многочисленные проблемы в базовых библиотеках, таких как библиотека GNU C и клиентские библиотеки X11, которые предварительно установлены в вашей системе GNU / Linux. Вы не можете легко исправить это, но вы не хотите видеть эти ошибки (и да, их много!), Поэтому Valgrind читает список ошибок, которые нужно устранить при запуске. Файл подавления по умолчанию создается скриптом ./configure при сборке системы.

Вы можете создать свои собственные средства подавления ошибок , которые, как вы знаете, не имеют отношения к вашему коду.

1 голос
/ 30 апреля 2009

Не был ли мотив Debian SSL мотивирован исправлением некоторых ложных срабатываний с помощью Valgrind?

...