Анализатор не делает "регвесты по исправлению ошибок" :). Чтобы их делать, нужен человек. Во-первых, только программист способен понять, предупреждение анализатора действительно указывает на аномалию/ошибку в коде, которую следует исправить. Во-вторых, исправление ошибки - это часто достаточно сложная творческая задача, на которую пока никакая программа не способна. Про сложность автоисправлений я писал в статье "Почему PVS-Studio не предлагает автоматические правки кода".
Это немного разное. Анализатор в Rider, это больше productivity tool. PVS-Studio это классический статический анализатор с такими возможностями, как baseline, классификация сообщений согласно OWASP и так далее.
Да, в анализаторе вручную прописаны тысячи аннотаций для функций из стандартной библиотеки, WinAPI и таких распространённых библиотек как Qt, Unreal Engine (про это даже статья отдельная была), Zlib и так далее. Разметка достаточно разносторонняя и касается не только возвращаемых значений, но и аргументов и их взаимосвязи. Это позволяет находить разнообразные аномальное использование функций.
Более того, если функция не проаннотирована, то анализатор сам пытается вывести на основе её тела некоторые критерии и затем использовать их в точках вызова функции. Другими словами, он пытается самостоятельно проаннотировать функции. К сожалению, получается это обычно только для относительно простых функций. Плюс тело функции должно быть доступно анализатору. Хорошо, если она в той-же единице компиляции. А если в другой, тот ту всё ещё сложнее и в игру вступает межмодульный анализ.
Часто к нашим статьям задают одни и те же вопросы. Ответы на них мы собрали здесь: Ответы на вопросы читателей статей про PVS-Studio, версия 2015. Пожалуйста, ознакомьтесь со списком.
Пример. Причём поясняющий текст менялся со временем. Но всё равно никто не читает и спрашивает про "уведомили разработчиков?", "проверили сами себя?".
А раз так, то смысла нет. Мы прекратили несколько лет назад приписывать в конце пояснения.
Наверное, Вас смущает, что статья звучит как новость «Впервые вышла PVS-Studio для Visual Studio» :). Конечно, это не так. Мы поддерживали и будем поддерживать новые версии Visual Studio. Но статья такая нужна, как минимум для того, чтобы можно было быстро нагулять её по запросу «pvs-studio visual studio 2022» и не писать письмо в поддержку с этим вопросом. А такие вопросы сейчас регулярно есть :).
Каждый .cpp файл обрабатывает отдельным процессом. Поскольку какие-то пользовательские данные потеряны быть не могут, то исключение std::bad_alloc будет перехвачено и ядро спокойно завершит работу, выдав соответствующее предупреждение. Т.е. какой-то особый файл будет просто не проверен. Поскольку это крайне редкое явление, как-то специально думать про такой сценарий нет необходимости.
А теоретически такое может быть? Да, может. Но это что-то особенное. Про один из таких интересных случаев вы можете услышать в докладе "Не связывайтесь с поддержкой C++ программистов". Это там, где про строковый литерал на 26 мегабайт.
Мы возродили и обновили эту игру!
Играть: Челлендж от анализатора PVS-Studio: насколько вы внимательны?
Продолжение про Toyota ITC спустя несколько лет: Что там у PVS-Studio c покрытием Toyota ITC Benchmark?
Да, да. Мы уже знакомы с этим форматом.
Анализатор не делает "регвесты по исправлению ошибок" :). Чтобы их делать, нужен человек. Во-первых, только программист способен понять, предупреждение анализатора действительно указывает на аномалию/ошибку в коде, которую следует исправить. Во-вторых, исправление ошибки - это часто достаточно сложная творческая задача, на которую пока никакая программа не способна. Про сложность автоисправлений я писал в статье "Почему PVS-Studio не предлагает автоматические правки кода".
Мы разбиради подобное здесь: Анализатор кода не прав, да здравствует анализатор.
Это немного разное. Анализатор в Rider, это больше productivity tool. PVS-Studio это классический статический анализатор с такими возможностями, как baseline, классификация сообщений согласно OWASP и так далее.
Здесь были собраны полезные советы по программированию. А теперь для разнообразия коллекция вредных :). 50 вредных советов для C++ программиста.
Благодаря обсуждениям здесь и на других площадках я подготовил более фундаментальную подборку: "50 вредных советов для C++ программиста" :). Спасибо.
Более того, если функция не проаннотирована, то анализатор сам пытается вывести на основе её тела некоторые критерии и затем использовать их в точках вызова функции. Другими словами, он пытается самостоятельно проаннотировать функции. К сожалению, получается это обычно только для относительно простых функций. Плюс тело функции должно быть доступно анализатору. Хорошо, если она в той-же единице компиляции. А если в другой, тот ту всё ещё сложнее и в игру вступает межмодульный анализ.
Дополнительно см. статью "Технологии статического анализа кода PVS-Studio".
В продолжение темы: Уязвимости из-за обработки XML-файлов: XXE в C# приложениях в теории и на практике.
Автор хотел иметь ответ на вопрос, который время от времени задаётся и обсуждается. А так дал ссылку - и всё :)
И раз вопрос временами задаётся - значит есть коллективное
бессознательноелюбопытство и теперь его можно удовлетворить :).Написал про всё это подробнее: Какая стратегия освобождения памяти используется в C и С++ ядре PVS-Studio?
The Simpsons Already Did It.
Мы приписывали в конце статей:
Пример. Причём поясняющий текст менялся со временем. Но всё равно никто не читает и спрашивает про "уведомили разработчиков?", "проверили сами себя?".
А раз так, то смысла нет. Мы прекратили несколько лет назад приписывать в конце пояснения.
Спорно. Можно обучиться и ошибкам :). Наши мысли на эту тему: Использование машинного обучения в статическом анализе исходного кода программ.
У меня, кстати, на эту тему заметка была :). Почему мы не пишем о сравнении PVS-Studio с другими статическими анализаторами кода.
А теоретически такое может быть? Да, может. Но это что-то особенное. Про один из таких интересных случаев вы можете услышать в докладе "Не связывайтесь с поддержкой C++ программистов". Это там, где про строковый литерал на 26 мегабайт.
5 — именованные константы + желательны комментарии, поясняющие формулы