Выбор инструмента анализа статического кода

голоса
54

Я работаю над проектом, где я кодирования в C в среде UNIX. Я использую инструмент ворса, чтобы проверить мой исходный код. Lint была вокруг в течение долгого времени (с 1979 г.), кто может предложить более свежий инструмент анализа кода я мог бы использовать? Предпочтительно инструмент, который свободен.

Задан 05/08/2008 в 22:19
источник пользователем
На других языках...                            


15 ответов

голоса
30

Не упускать из вида самого компилятора.

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

Также убедитесь, что сказать ваш компилятор для лечения предупреждения как ошибки, так что вы будете вынуждены исправить их сразу. ( "-Werror" на ССЗ)

Кроме того : «-Wall» на GCC это не позволит все предупреждения, не обманывайте себя.

Кроме того, также: проверить Valgrind - это «автоматически определять [S] много управления памятью и поточные ошибок, и профиль [ы] ваши программы в деталях.» (Бесплатно!)

Valgrind не является статичной проверки, но это отличный инструмент! http://valgrind.org

Ответил 05/08/2008 d 23:17
источник пользователем

голоса
14

Для кода C, то вы определенно должны обязательно использовать FlexeLint . Я использовал его в течение почти 15 лет , и клясться ею. Одна из действительно замечательных возможностей у него есть то , что предупреждения могут быть выборочно выключены и через комментарии в коде ( «/ * ворс -e123 * /»). Это оказалось мощным инструментом документации , когда вы хотите что - то из ряда вон выходящим. «Я выключая предупреждение X, следовательно, есть некоторые хорошие причины я делаю X.»

Ни для кого в интересных C / C ++ вопросы, рассмотрим некоторые из их примеров на их сайт и посмотреть, если вы можете выяснить ошибки, не глядя на намеки.

Ответил 05/08/2008 d 22:42
источник пользователем

голоса
12

Я слышал хорошие вещи о Clang статический анализатор , который IIRC использует LLVM , как это бэкенд. Если это реализовано на вашей платформе, что может быть хорошим выбором.

Из того, что я понимаю, это делает немного больше, чем просто синтаксис анализа. «Автоматический поиск Bug», например.

Ответил 06/08/2008 d 01:40
источник пользователем

голоса
5

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

Ответил 03/09/2008 d 23:11
источник пользователем

голоса
5

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

Это не бесплатный инструмент (хотя я считаю, что они предлагают бесплатное сканирование для проектов с открытым исходным кодом), но это один из лучших инструментов статического анализа, которые вы найдете. Я слышал, что еще более внушительно на C, чем на C ++, но это помогло нам избежать целого ряда ошибок, до сих пор.

Ответил 15/08/2008 d 18:47
источник пользователем

голоса
4

Вы можете использовать cppcheck . Это простой в использовании инструмент статического анализа кода.
Например:
cppcheck --enable=all .
будет проверять все файлы / C C ++ под текущей папке.

Ответил 25/06/2015 d 15:54
источник пользователем

голоса
1

Вы можете попробовать CppDepend , довольно полный статический анализатор , доступных на окнах и Linux, Повсеместно VS Plugin, IDE или командной строки, и это бесплатно для участников с открытым исходным кодом

Ответил 26/06/2015 d 12:01
источник пользователем

голоса
1

PC-Lint / FlexeLint очень мощные и полезные инструменты статического анализа, и высоко настраиваемый, хотя , к сожалению , не бесплатно.

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

При постоянном использовании, как это, вы скоро узнаете, как написать свой код таким образом, что подтверждает правилам, применяемым инструментом.

Из-за этого, я предпочитаю инструменты, такие как Lint, которые идут относительно быстро, и поэтому поощрять постоянное использование, а не более громоздких инструментов, которые вы можете в конечном итоге с использованием менее часто, если вообще.

Ответил 20/12/2008 d 00:29
источник пользователем

голоса
1

Lint-подобные инструменты, как правило, страдают от проблемы «ложной тревоги»: они сообщают гораздо больше проблем, чем на самом деле существует. Если доля действительно-полезных предупреждений слишком низок, пользователь узнает, просто игнорировать инструмент. Более современные инструменты затратить некоторые усилия, чтобы сосредоточиться на наиболее вероятных / интересных предупреждений.

Ответил 23/08/2008 d 15:29
источник пользователем

голоса
1

Вы можете найти инструмент Uno полезным. Это один из немногих свободных вариантов , не игрушка. Она отличается от пуха, FlexeLint и т.д., сосредоточив внимание на небольшом числе «смысловых» ошибок (указатель нулевой derefs, недоступный индексов массива, а также использование неинициализированных переменных). Она также позволяет определенному пользователю проверку, как блокировке разблокировать дисциплины.

Я работаю в направлении публичного выпуска преемника инструмента, Orion ( КОНТЕНТ не доступен )

Ответил 15/08/2008 d 23:39
источник пользователем

голоса
0

Разреженных является инструментом компьютерного программного обеспечения, уже доступен на Linux, предназначенный для поиска возможных ошибок кодирования в ядре Linux.

Есть два активных проектов Центра верификации Linux , направленные на улучшение качества загружаемых модулей ядра.

  1. Linux Driver Verification (LDV) - комплексный набор инструментов для статического исходного кода проверки драйверов устройств Linux.
  2. КЕДР Framework - расширяемые рамки для динамического анализа и проверки модулей ядра.
  3. Другой действующий проектом является Linux File System Проверки, которая направлена ​​на разработку специализированного набора инструментов для проверки реализаций файловой системы Linux.
Ответил 20/12/2012 d 08:36
источник пользователем

голоса
0

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

Есть некоторые хорошее обсуждение в некоторых переговорах здесь . Это от конференции , проведенной Департаментом внутренней безопасности США по статическому анализу.

Ответил 15/06/2011 d 07:53
источник пользователем

голоса
0

G'day,

Я полностью согласен с предложениями, чтобы прочитать и переварить то, что компилятор говорит вам, после установки -Wall.

Хороший инструмент статического анализа для обеспечения безопасности является Flawfinder написанного Дэвидом Wheeler. Это хорошая работа ищет различные эксплойты,

Тем не менее, он не заменяет имеющий знающих кто-то прочитал ваш код. Как говорит Дэвид на его веб-странице, «Дурак с инструментом еще дурак!»

веселит,

обкрадывать

Ответил 26/08/2008 d 16:21
источник пользователем

голоса
0

ворса постоянно обновляется ... Так почему же вы хотите более позднюю один.

КСТАТИ FlexeLint является ворс

Ответил 23/08/2008 d 12:42
источник пользователем

голоса
0

Существует «-Weffc ++» вариант для НКИ, который согласно странице Mac OS X человека будет:

Предупреждать о нарушении следующих принципов стиля из книги Скотт Мейерс Эффективное использование C ++:

[Надрез]

Я знаю, что вы спросили о С, но это ближайший я не знаю ..

Ответил 15/08/2008 d 23:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more