Сведения о вопросе

Holish

16:03, 1st July, 2020

Теги

c   unix   testing    

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

Просмотров: 596   Ответов: 15

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



  Сведения об ответе

PHPH

18:03, 1st July, 2020

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

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

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

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

Также: выезд valgrind (бесплатно!)- это " автоматически detect[s] многие ошибки управления памятью и потоками, а также profile[s] ваши программы в деталях."

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


  Сведения об ответе

ASER

18:03, 1st July, 2020

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

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


  Сведения об ответе

davran

18:03, 1st July, 2020

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

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


  Сведения об ответе

DINO

18:03, 1st July, 2020

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

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


  Сведения об ответе

PAGE

18:03, 1st July, 2020

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


  Сведения об ответе

LAST

18:03, 1st July, 2020

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




  Сведения об ответе

ЯЯ__4

18:03, 1st July, 2020

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


  Сведения об ответе

ITSME

18:03, 1st July, 2020

Вы можете найти инструмент Uno полезным. Это один из немногих бесплатных вариантов без игрушек. Он отличается от корпии, Флекселинта и др. при сосредоточении внимания на небольшом количестве ошибок "semantic" (null deref указателя, out-of-bounds индексов массива и использование неинициализированных переменных). Он также позволяет выполнять определенные пользователем проверки, такие как дисциплина блокировки-разблокировки.

Я работаю над публичным выпуском нового инструмента Orion (контент больше не доступен )


  Сведения об ответе

ASER

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

JUST___

18:03, 1st July, 2020

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


  Сведения об ответе

baggs

18:03, 1st July, 2020

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

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


  Сведения об ответе

PROGA

18:03, 1st July, 2020

Линт постоянно обновляется... так зачем же вам нужен более свежий вариант?

BTW flexelint - это Линт


  Сведения об ответе

lool

18:03, 1st July, 2020

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

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

[надрез ]

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


  Сведения об ответе

fo_I_K

18:03, 1st July, 2020

Добрый день,

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

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

Однако это не заменяет того, что кто-то знающий читает ваш код. Как говорит Дэвид на своей веб-странице, "A fool with a tool is still a fool!"

овации,

Грабить


  Сведения об ответе

DAAA

18:03, 1st July, 2020

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

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

  1. Linux Driver Verification (LDV) - полный набор инструментов для статической проверки исходного кода драйверов устройств Linux.
  2. KEDR Framework-это расширяемая платформа для динамического анализа и верификации модулей kernel.
  3. Еще одним текущим проектом является проверка Linux файловой системы, которая направлена на разработку специального набора инструментов для проверки реализаций Linux файловой системы.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться