Действительно ли возможно сказать valgrind игнорировать некоторый набор библиотек? Конкретно библиотеки glibc..
Фактическая проблема: у Меня есть некоторый код, который хорошо работает в нормальном выполнении. Никакие утечки и т.д.
Когда я пытаюсь выполнить его через valgrind, я получаю перезапуски/остановки программы и дампы ядра.
Ядро обычно указывает на функции glibc (обычно fseek, взаимное исключение и т.д.). Я понимаю, что могла бы быть некоторая проблема с несовместимым glibc / valgrind версия.
Я попробовал различные выпуски valgrind и glibc версии, но никакую удачу. Какие-либо предложения?
Вы, вероятно, захотите спросить об этом в списке рассылки пользователя Valgrind (что очень полезно). Вы можете подавить вывод определенных вызовов, однако подавление шума - это все, что вы делаете. Звонки по-прежнему проходят через Valgrind.
Чтобы выполнить то, что вам нужно, вы (в идеале) соответствующим образом сопоставите Valgrind с glibc или , используйте макросы из valgrind / valgrind.h
, чтобы обойти их. Используя их, да, вы можете сказать valgrind не трогать определенные вещи. Я не уверен, какие вызовы все запускают, однако вы также можете (выборочно) не запускать фрагменты кода в своей собственной программе, если она выполняется под valgrind. См. Макрос RUNNING_ON_VALGRIND
в valgrind / valgrind.h
.
Еще одна вещь, которая приходит на ум, - это убедиться, что Valgrind был правильно скомпилирован для работы с потоками . Имейте в виду, что атомарные операции в Valgrind могут привести к сбою вашей программы во время скачкообразных операций, чего в противном случае не могло бы быть, если бы она не была правильно настроена.
Если вы меняли местами версии valgrind и glibc, есть вероятность, что вы нашли совпадение, но неправильно настроили valgrind во время сборки.
Как было отмечено в unwind, valgrind имеет продуманный механизм для управления инструментами и способами управления ими. Но и valgrind, и glibc - сложные звери, и вы действительно, очень, очень не хотите этого делать. Самый простой способ получить взаимно совместимые glibc и valgrind - это получить оба из дистрибутива Linux по вашему выбору . Вещи должны «просто работать», а если нет, вам есть к кому пожаловаться.