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

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

5.08.2008 21:19:40
См. Также « Что такое лучший инструмент командной строки для очистки кода» и « Рекомендуемые параметры предупреждений GCC для C» . Если у вас есть прототипы, правильно централизованные в заголовках и используемые повсеместно, то проверка межфайловой проверки lintтакже выполняется компилятором (хотя и по одному файлу за раз).
Jonathan Leffler 5.03.2012 06:30:55
Голосование, чтобы закрыть как инструмент рек.
Ciro Santilli 冠状病毒审查六四事件法轮功 2.07.2015 12:16:35
Анализатор PVS-Studio теперь доступен для Linux - viva64.com/ru/b/0441
user965097 6.11.2016 20:23:47
15 ОТВЕТОВ
РЕШЕНИЕ

Не забывайте о самом компиляторе.

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

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

Также: «-Wall» на gcc не включает все предупреждения, не обманывайте себя.

Также также: проверьте valgrind (бесплатно!) - он «автоматически обнаруживает множество ошибок управления памятью и многопоточности, а также подробно описывает ваши программы».

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

34
5.08.2008 22:17:24
Почему это принятый ответ? Что если я хочу проверить безопасность ресурсов, например заблокировать / разблокировать? Компилятор не может ничего сделать. А valgrind - это динамический анализ кода ...
UmNyobe 25.03.2013 09:54:24

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

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

16
5.08.2008 21:42:22
Flexelint смехотворно дорог.
nwp 5.06.2014 13:21:57
@nwp, я бы не сказал, что это дорого. При стоимости одного места в 1000 долл. США (Unix) или 400 долл. США (Windows) он, вероятно, окупается одним вопросом клиента.
Mark Harrison 5.06.2014 19:20:28
@MarkHarrison: я могу использовать это онлайн?
user2793162 22.07.2014 19:02:21

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

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

13
21.05.2014 14:28:40

Мы использовали Coverity Prevent для проверки исходного кода C ++.

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

5
15.08.2008 17:47:21

Для gcc есть опция "-Weffc ++", которая согласно справочной странице Mac OS X будет:

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

[Надрез]

Я знаю, что вы спросили о C, но это самое близкое, что я знаю ..

0
15.08.2008 22:03:12
Для существующей кодовой базы -Weffc ++ имеет слишком много «нудных» предупреждений, чтобы оправдать использование в сочетании с -Werror.
Tom 10.05.2009 22:10:32

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

Я работаю над публичным выпуском инструмента-преемника Orion ( СОДЕРЖАНИЕ НЕ ДОСТУПНО БОЛЬШЕ )

1
30.01.2016 12:43:30

lint постоянно обновляется ... так почему вы хотите более новый.

Кстати, flexelint это ворс

0
23.08.2008 11:42:30
FlexeLint - это коммерческий продукт, который не имеет общей истории развития с оригинальной Unix Lint компании Johnson, AFAIK. Некоммерческая альтернатива - Splint.
Chris Conway 8.09.2008 14:20:37

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

1
8.09.2008 14:21:05

G'day,

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

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

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

веселит,

обкрадывать

0
26.08.2008 15:21:28

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

5
3.09.2008 22:11:19
+1 за шину, отличный инструмент и бесплатно (как в свободе слова, а не как в бесплатном пиве)
bortzmeyer 11.05.2009 08:15:25
Это бесплатно в обоих значениях термина.
sebnow 22.08.2010 14:46:44

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

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

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

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

1
19.12.2008 23:29:54

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

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

0
15.06.2011 06:53:42

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

Существует два активных проекта Linux Verification Center, направленных на улучшение качества загружаемых модулей ядра.

  1. Проверка драйверов Linux (LDV) - полный набор инструментов для статической проверки исходного кода драйверов устройств Linux.
  2. KEDR Framework - расширяемая среда для динамического анализа и проверки модулей ядра.
  3. Другим текущим проектом является Проверка файловой системы Linux, целью которой является разработка специального набора инструментов для проверки реализации файловой системы Linux.
0
20.12.2012 07:36:49

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

6
25.06.2015 15:54:11

Вы можете попробовать CppDepend , довольно полный статический анализатор, доступный в Windows и Linux, с помощью плагина VS, IDE или командной строки, и он бесплатный для участников с открытым исходным кодом.

1
26.06.2015 12:01:12