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

Есть ли Findbugs и/или PMD-эквивалент для C/С++?

Недавно меня спросили об альтернативах Coverity Prevent для базы кода, которая включает как C/С++, так и Java. Очевидно, что на стороне Java бесплатные доступные инструменты включают в себя Findbugs (скомпилированный анализ кода) и PMD (анализ статического кода). Они очень эффективны, особенно когда вы начинаете исследовать интеграцию с IDE (что опять же является бесплатным).

Однако, когда вы начинаете перемещаться в область C/С++ с различными компиляторами, архитектурами и т.д., все становится очень рискованно.

Я предложил различные инструменты для Java-стороны, включая как Findbugs, так и PMD. То, что я ищу, является лучшим вариантом для C/С++, когда рассматривается с использованием следующих показателей:

  • Цена: бесплатно лучше, но можно победить за лучшую цену. Тем не менее, модели ценообразования, взимающие плату за строку кода, ужасают.
  • Набор функций: как этот инструмент улучшает мою жизнь? Каким образом он обнаруживает мои ошибки, прежде чем я их проверю, прежде чем мы отправим код и т.д.?
  • Юзабилити: могу ли я использовать инструмент за своим столом? Могу ли я поделиться отчетами и/или результатами? Можно ли интегрировать инструмент с Fogbugz (который мы используем в моей группе)? Можно ли интегрировать инструмент в CruiseControl (или эквивалент)?

Конечным инструментом будет то, что полезно и полезно, как комбинация Findbugs и PMD с идентичным набором функций, всего за нулевые доллары за место.

4b9b3361

Ответ 1

Два, которые приходят на ум, Splint для C и Cppcheck для С++.

Если вы хотите найти дополнительные параметры, эта функция этих инструментов - "статический анализ кода". Это может помочь вам найти больше инструментов для C и/или С++. Кроме того, вам может быть интересен ответ на вопрос Какие доступны инструменты для статического анализа с открытым исходным кодом С++?

Ответ 2

С++ - достаточно сложный язык, который инструментарий для него (например, инструменты рефакторинга или статического анализа) просто не так хорош, как Java или С#.

Gimpel Software PC-lint является самым близким к стандартным средствам проверки ошибок для С++, о которых я знаю. Он коммерческий с разумной ценовой моделью. Я не знаю, насколько хорошо он интегрируется с другими инструментами.

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

Ответ 3

PC-Lint - это путь. В отличие от большинства других инструментов, он имеет полное межфункциональное и межмодульное отслеживание значений и поддерживает все волосатые края компиляции/разбора шаблонов. Я купил для себя личный экземпляр около 9 лет назад, только потому, что он так дешев. В конечном итоге я использовал его в проектах с открытым исходным кодом. PC-Lint не лицензируется на основе LOC, он не звонит домой, и нет сервера лицензий. Это очень касается системы чести и очень безнравственности. За 9 лет я нашел в нем некоторые проблемы (и их было немного и далеко), но они почти всегда фиксировались через несколько недель.

С открытым исходным кодом мудрый, есть SMatch, основанный на методах анализа мета-компиляции Coverity, который проект вина использует довольно сильно, чтобы иметь большой эффект. Инструмент PMD cpd (копирование пасты) работает на С++ и работает очень быстро. Для циклической сложности есть pmccabe, который легко устанавливается через apt-get (в Linux, в Windows я компилирую исходный код в cygwin).

PC-Lint требует некоторой конфигурации, чтобы заставить ее работать хорошо, максимум день или два. Другие инструменты работают не так глубоко, поэтому вы можете просто напасть на землю, используя команду "find. -name.c | xargs pmccabe | sort -n | tail -n 20"

Ответ 4

Я использовал Klocwork и Rational Software Analyzer в прошлом, и оба они хорошо работают, хотя оба являются коммерческими/не бесплатными.

Ответ 5

Я использую flawfinder.py, который сканирует 160 опасных функций в C/С++. http://www.dwheeler.com/flawfinder/

Если вам нужен рубиновый порт на основе flawfinder, вы можете использовать vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Оба этих инструмента сканируют файлы исходного кода на C/С++ для известных уязвимостей, включая переполнение буфера, условия гонки, слабые криптограммы, конфигурации chroot jail config и т.д.).

Rick