Подтвердить что ты не робот

Подавлять предупреждения Valgrind от iOS SDK

Я выполнил этот подход, чтобы запустить Valgrind в приложении iOS. К сожалению, предупреждения, относящиеся к SDK iOS, практически не позволяют найти какие-либо предупреждения, связанные с моим приложением. Есть ли список запретов iOS для Valgrind, поэтому мне не нужно их самостоятельно создавать?

4b9b3361

Ответ 1

Похоже, вы, вероятно, можете изменить код, который находится в вашем main(), чтобы он передал правильные параметры Valgrind. (Обратите внимание, что это предполагает, что вы используете memcheck, который является параметром по умолчанию, а также то, что вы, кажется, используете из вашего pastebin).

Ожидается, что Valgrind/Memcheck сообщит об ошибках в библиотеках, которые у вас уже есть, включая SDK Obj-C/iOS. Чтобы подавить Memcheck из сообщений об ошибках, используйте это:

Это автоматически генерирует подавления: --gen-suppressions=yes


Вы также можете захотеть пойти немного глубже и настроить то, что вы не хотите видеть:

Добавить файл подавления, который необходимо учитывать: --suppressions=/path/to/file.supp.

Строка типа подавления (вторая) должна иметь следующий вид:

Memcheck:suppression_type

Типы подавления Memcheck:

Value1, Value2, Value4, Value8, Value16, что означает ошибку неинициализированного значения при использовании значения 1, 2, 4, 8 или 16 байтов.

Cond (or its old name, Value0), что означает использование неинициализированного кода состояния процессора.

Addr1, Addr2, Addr4, Addr8, Addr16, что означает неправильный адрес во время доступа к памяти 1, 2, 4, 8 или 16 байтов соответственно.

Jump, что означает переход к ошибке без адресации.

Param, что означает неправильную ошибку параметра системного вызова.

Free, что означает недопустимый или несоответствующий.

Overlap, что означает перекрытие src/dst в memcpy или аналогичную функцию.

Leak, что означает утечку памяти.

Также проверьте подавление ошибок в документах Valgrind для получения дополнительной информации. Обратите внимание, что вам разрешено иметь несколько файлов подавления, поэтому я просто напишу их, чтобы их можно было удалить позже.


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

Ошибки неинициализированных значений - это то, где вас предупреждают о неинициализированных значениях (duh) - однако, это происходит только тогда, когда у вас есть неинициализированное значение, которое будет иметь значение, поскольку существуют другие виды использования неинициализированных значений.

Обычно они разрешаются для распространения до тех пор, пока вы не будете использовать их там, где вы "не должны". Он сообщает эти значения, тогда, когда вы на самом деле пытаетесь их использовать.

Вы уже знаете, что вы можете включить --track-origins=<yes|no> (по умолчанию - no), чтобы узнать, откуда они пришли, и похоже, что они из SDK. Для тех, кто не знает, --track-origins действительно очень полезен, потому что когда он выключен, вы только знаете, что неинициализированное значение используется "опасным" способом, но вы не знаете, откуда взялось неинициализированное значение.

Помните, что Memcheck отклонит установку этого параметра yes, если также используется --undef-value-errors=no.