Что лучший инструмент командной строки должен очистить код?

Для меня это решение работало на Mac Sierra OS:

sudo /usr/local/bin/mysql.server start
Starting MySQL
SUCCESS!
31
задан GEOCHET 1 June 2009 в 08:18
поделиться

6 ответов

Как Dan Fego указал, GCC может поймать неиспользуемые переменные и неиспользованные статические функции. Это не будет обычно находить неиспользованные функции экстерна, поскольку это обычно работает один исходный файл за один раз.

GCC (v4.3.2) имеет сотни если не тысячи опций. Тот, который мог бы помочь,' --combine' для объединения исходных файлов (как долго, поскольку Вы не имеете привычку ставить те же имена функций или имена переменной в файлах другого источника).

опция ' --help ' говорит Вам больше; опции' --help=optimizers' и' --help=warnings' каждый дает Вам пару сотни строк вывода. Предупреждения включают:

-Wunused                    This switch lacks documentation
-Wunused-function           Warn when a function is unused
-Wunused-label              This switch lacks documentation
-Wunused-macros             Warn about macros defined in the main file that
                            are not used
-Wunused-parameter          Warn when a function parameter is unused
-Wunused-value              Warn when an expression value is unused
-Wunused-variable           Warn when a variable is unused
<час>

Добавленный : это - сценарий, названный glint, что я использую для очистки моего кода. Это довольно старо, таким образом, это не использует' #!/bin/sh' нотация для первой строки, и это говорит' $*' вместо' "$@"', оба из которых должны быть зафиксированы, но никакой потребности, которые будут зафиксированы срочно. Обратите внимание, что даже при том, что GCC 4.x больше не поддерживает' -fwriteable-strings' опция, он все еще поддерживает' -Wwrite-strings' опция, и это имеет значение.

Этот сценарий демонстрирует, что можно вытащить большой пробег из существующих инструментов только с небольшим объемом работы. Можно настроить примерно каждую опцию, которую это использует - хотя главным образом через среду, а не командную строку. Конечно, можно добавить дополнительные опции предупреждения к командной строке; то, что Вы не можете сделать, удаляют предопределенные опции кроме через среду. Но это в порядке; они выбраны по умолчанию на серьезных основаниях. В эти дни я, вероятно, установил' GLINT_ANSI=-std=c99' или исправляю сценарий; я не использовал его очень в последнее время, так как я кодирую справедливо тесно к стандарту, который glint осуществляет. (Обратите внимание, что' -o /dev/null' означает, что можно только сделать один файл за один раз; взломайте для фиксации!)

:   "@(#)$Id: glint.sh,v 1.5 2002/08/09 21:40:52 jleffler Exp jleffler $"
#
#   Use GCC as excruciatingly pedantic lint
#   Not a complete replacement for lint -- it doesn't do inter-file checking.
#   Now configurable via the environment.
#   Use GLINT_EXTRA_FLAGS to set extra flags via the environment.
#   NB: much Solaris code won't work with -undef enabled.

: ${GLINT_GCC:='gcc'}

: ${GLINT_ANSI='-ansi'}
: ${GLINT_FNO_COMMON='-fno-common'}
: ${GLINT_FSHORT_ENUMS='-fshort-enums'}
: ${GLINT_PEDANTIC='-pedantic'}
: ${GLINT_UNDEF='-undef'}
: ${GLINT_W='-W'}
: ${GLINT_WAGGREGATE_RETURN='-Waggregate-return'}
: ${GLINT_WALL='-Wall'}
: ${GLINT_WCAST_ALIGN='-Wcast-align'}
: ${GLINT_WCAST_QUAL='-Wcast-qual'}
: ${GLINT_WCONVERSION='-Wconversion'}
: ${GLINT_WMISSING_DECLARATIONS='-Wmissing-declarations'}
: ${GLINT_WREDUNDANT_DECLS='-Wredundant-decls'}
: ${GLINT_WMISSING_PROTOTYPES='-Wmissing-prototypes'}
: ${GLINT_WNESTED_EXTERNS='-Wnested-externs'}
: ${GLINT_WPOINTER_ARITH='-Wpointer-arith'}
: ${GLINT_WSHADOW='-Wshadow'}
: ${GLINT_WSTRICT_PROTOTYPES='-Wstrict-prototypes'}
: # ${GLINT_WTRADITIONAL='-Wtraditional'}
: ${GLINT_WWRITE_STRINGS='-Wwrite-strings'}

exec ${GLINT_GCC} \
    ${GLINT_ANSI} \
    ${GLINT_FNO_COMMON} \
    ${GLINT_FSHORT_ENUMS} \
    ${GLINT_PEDANTIC} \
    ${GLINT_UNDEF} \
    ${GLINT_WAGGREGATE_RETURN} \
    ${GLINT_WALL} \
    ${GLINT_WCAST_ALIGN} \
    ${GLINT_WCAST_QUAL} \
    ${GLINT_WCONVERSION} \
    ${GLINT_WMISSING_DECLARATIONS} \
    ${GLINT_WREDUNDANT_DECLS} \
    ${GLINT_WMISSING_PROTOTYPES} \
    ${GLINT_WNESTED_EXTERNS} \
    ${GLINT_WPOINTER_ARITH} \
    ${GLINT_WSHADOW} \
    ${GLINT_WSTRICT_PROTOTYPES} \
    ${GLINT_WTRADITIONAL} \
    ${GLINT_WWRITE_STRINGS} \
    ${GLINT_W} \
    ${GLINT_EXTRA_FLAGS} \
    -o /dev/null -O4 -g -c $*
28
ответ дан 27 November 2019 в 22:08
поделиться

Линт является классическим инструментом для проверки стиля на программах C. Существует более современное воплощение его, звонил Шплинт. Эта статья в Википедии имеет список статических инструментов анализа кода, некоторые освобождают, некоторая реклама.

14
ответ дан 27 November 2019 в 22:08
поделиться

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

  1. Шплинт : Я часто использую Шплинт, потому что это доступно для многих GNU/дистрибутивы Linux. Относительно легко работать с; однако, это имеет тенденцию быть подавляющим при работе при самой строгой установке. Кроме того, иногда необходимое использование аннотаций может создать помехи и запутать легко читаемый код. Независимо, я предлагаю использовать его.

  2. Uno: Uno является определенно обещанием, но это не столь строго как Шплинт (дизайном). Вместо этого это фокусируется на ясности и полноценности ее предупреждений. Для меня Uno только полезен как дополнение к Шплинту (для ясного указания на предупреждения, скрытые среди сравнительно многие тот Шплинт проблемы).

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

  4. Pscan: (Мертвая гиперссылка), Pscan является большим для нахождения уязвимостей строки формата! Как с Uno, я предлагаю использовать его в качестве дополнения к Шплинту.

, Если Вы не работаете с C, можно также хотеть проверить: Википедия - Список инструментов для статического анализа кода , Инструменты Контроля/Обзора, Источник/Двоичный код Статические Анализаторы , и безопасность Исходного кода Анализаторы .

10
ответ дан 27 November 2019 в 22:08
поделиться

При выполнении gcc с - Стена он поймает некоторые вещи, которые Вы упоминаете, такие как неиспользуемые переменные (и возможно неиспользованные функции). С точки зрения оптимизации я не делаю, хотя в целом компилятор достаточно умен для создания видов из оптимизации, которая имеет значение, таким образом, я не волновался бы слишком много. Просто не используйте ужасные алгоритмы. ;-)

6
ответ дан 27 November 2019 в 22:08
поделиться

шплинт ( http://www.splint.org/ ) довольно превосходен; я использовал его на мегалинейных кодах для поиска этого вида вещи,

(Обновленный: все хотят быть художественным руководителем.)

3
ответ дан 27 November 2019 в 22:08
поделиться

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

, Возможно, gprof может выручить?

Редактирование/Johan

: Или так как Вы говорили об очистке, инвертируйте мой ответ выше и удалите код, который никогда не выполняется.

0
ответ дан 27 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

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