Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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

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

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

16.09.2009

Ответы:


1

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

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

16.09.2009
  • Спасибо за ссылку на вики. В этом случае я пытаюсь создать конкретный набор функций, а не список всех доступных инструментов. Этот вопрос специально пытается ответить на рефлексивный ответ, который я получаю, когда говорю о Findbugs и PMD: О, ничего подобного для C ++ не существует. 16.09.2009
  • Инструменты, с которыми я связался, являются, исходя из моего ограниченного опыта работы с C / C ++, ведущими некоммерческими инструментами для статического анализа кода для этих языков. Могут быть и другие, но если бы мне нужно было выполнить статический анализ чего-либо на одном из этих языков, я бы взял эти инструменты. 16.09.2009
  • @Thomas Owens, честно - спасибо за рекомендации. 16.09.2009

  • 2

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

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

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

    16.09.2009
  • PC-Lint довольно легко интегрировать, по крайней мере, с точки зрения отчетов об ошибках, поскольку вы можете настроить формат сообщений об ошибках в соответствии с требованиями вашей IDE для автоматического поиска ошибок. 16.09.2009
  • Я не согласен с комментарием о сложности. Я согласен, что гораздо удобнее анализировать байтовый код Java или стандартный исходный код Java. 16.09.2009
  • Макросы, полный по Тьюрингу язык шаблонов времени компиляции, достаточная сложность и особые случаи, когда большинство (все?) Компиляторы ошибаются в некоторых аспектах стандарта, в результате чего Boost приходится разрабатывать обширный список обходных путей компилятора ... Мне нравится C ++ , но это непростой язык, и это усложняет работу с инструментами. 16.09.2009
  • @ Джош Келли, да, в C ++ есть много способов споткнуться, поэтому я ищу инструменты. Что касается написания детекторов для некоторых из этих случаев, все еще возможно анализировать код, даже если вы не можете обработать все комбинации оборудования, компилятора и библиотеки. По общему признанию, это ОГРОМНАЯ боль в * ss (по сравнению с Java), но есть люди, которые этим занимаются. 16.09.2009

  • 3

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

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

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

    01.12.2009

    4

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

    16.09.2009

    5

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

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

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

    Рик

    04.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..