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

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

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПК-линт/Флекселинт — это очень мощные и полезные инструменты статического анализа, легко настраиваемые, но, к сожалению, не бесплатные.

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

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

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

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

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

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

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

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

[отрывок]

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

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

Кстати, флекселинт является ворс

Добрый день,

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

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

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

ваше здоровье,

Роб

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

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

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

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

  1. Проверка драйверов Linux (LDV) — комплексный набор инструментов для статической проверки исходного кода драйверов устройств Linux.
  2. KEDR Framework — расширяемый фреймворк для динамического анализа и проверки модулей ядра.
  3. Еще один текущий проект — «Проверка файловой системы Linux», целью которого является разработка специального набора инструментов для проверки реализаций файловой системы Linux.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top