Статические анализаторы кода для C

Кроме того, в файле PHP.INI есть параметр:

max_input_vars

, который в моей версии PHP: 5.4.16 по умолчанию - 1000.

Из руководства: «Сколько входных переменных может быть принято (предел применяется к $ _GET, $ _POST и $ _COOKIE суперглобальным отдельно)»

Ref .: http://www.php.net/manual/ ан / info.configuration.php # ini.max-ввода-вары

10
задан Josip 17 July 2009 в 19:24
поделиться

6 ответов

Википедия поддерживает список инструментов статического анализа кода для различных языков (включая C).

Лично я использовал оба PC-Lint ] и Шина . Лучший выбор зависит от типа написанного вами приложения. Однако независимо от того, какой инструмент вы используете, соотношение сигнал / шум будет низким, пока вы правильно не настроите инструмент и код.

PC-Lint - самый мощный инструмент Lint, который я использовал. Если вы добавите его в существующий проект, отношение сигнал / шум может быть низким. Однако после того, как инструмент и ваш код настроены правильно, его можно использовать как часть стандартного процесса сборки. В последнем крупном проекте, в котором я его использовал, мы настроили его так, чтобы предупреждения PC-Lint нарушали сборку. Лицензии на PC-Lint стоят 389 долларов, но это того стоит.

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

Valgrind также заслуживает рассмотрения в качестве инструмента динамического анализа.


Вы специально запросили отзывы о SourceMonitor . Этот инструмент предоставляет интересные показатели вашего кода, но его следует использовать в качестве дополнения к хорошему инструменту Lint, поскольку он не обеспечивает такого рода анализ.

Как указано на их домашней странице, SourceMonitor будет:

... узнайте, сколько у вас кода и

Valgrind также стоит рассматривать как инструмент динамического анализа.


Вы специально запросили отзывы о SourceMonitor . Этот инструмент предоставляет интересные показатели вашего кода, но его следует использовать в качестве дополнения к хорошему инструменту Lint, поскольку он не обеспечивает такого рода анализ.

Как указано на их домашней странице, SourceMonitor будет:

... узнайте, сколько у вас кода и

Valgrind также заслуживает рассмотрения в качестве инструмента динамического анализа.


Вы специально запросили отзывы о SourceMonitor . Этот инструмент предоставляет интересные показатели вашего кода, но его следует использовать в качестве дополнения к хорошему инструменту Lint, поскольку он не обеспечивает такого рода анализ.

Как указано на их домашней странице, SourceMonitor будет:

... узнайте, сколько у вас кода и определить относительную сложность ваши модули. Например, вы можете использовать SourceMonitor для идентификации кода который, скорее всего, будет содержать дефекты и поэтому требует формального обзора.

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

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

14
ответ дан 3 December 2019 в 16:54
поделиться

I'm a big fan of David Evans's work on LC/Lint, which has apparently had its name changed to Splint. It is very aggressive, and you can tell it a lot of useful information by adding annotations to your code. It is designed to be used with programmer annotations. It will function without them, but if you try to use it as a simple checker without providing any annotations, you will probably be disappointed. If what you want is totally automated checking, and if you can deal with a Windows-only tool, you're better off with Gimpel's PC-Lint. Jim Gimpel has had happy customers for over 25 years.

2
ответ дан 3 December 2019 в 16:54
поделиться

Мы используем PC-Lint и очень им довольны.

Кажется, есть несколько лагерей относительно подавления и настройки сообщений:

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

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

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

5
ответ дан 3 December 2019 в 16:54
поделиться

Есть шина , хотя, честно говоря, мне никогда не удавалось заставить ее работать; на моей платформе он действительно слишком активен. На практике мои наиболее часто используемые «lint» - это следующие предупреждающие флаги для gcc

-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code  -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual

. Конечно, я почти забыл, что означает половина из них. Но они улавливают довольно много вещей.

3
ответ дан 3 December 2019 в 16:54
поделиться

Я всегда использовал PCLint , и он мне очень понравился. Хотелось бы, чтобы они попали в C # ... Это те, у кого во всех журналах появляются популярные викторины по коду C или C ++.

0
ответ дан 3 December 2019 в 16:54
поделиться

Он есть в проект llvm clang http://clang-analyzer.llvm.org . Сам я не пробовал, но собираюсь это сделать.

В действии выглядит неплохо: http://www.mikeash.com/?page=pyblog/friday-qa-2009-03-06-using-the-clang-static-analyzer.html Выше для Objective-C, но он должен быть таким же для C.

0
ответ дан 3 December 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: