Существует ли эквивалент Findbugs и / или PMD для C / C ++?

StackOverflow https://stackoverflow.com/questions/1433632

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

На ум приходят Splint для C и Cppcheck для C ++.

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Рик

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top