Ответ 1
Существует, конечно, список википедии. Этот список - это просто список, а не сравнение, но один из ссылок на странице, по крайней мере, частично отвечает на ваш вопрос и (очень кратко) упоминает пару программ, которые вы указали.
Проводили ли какие-либо сравнения с инструментами анализа статического кода, доступными для Linux? Каковы сильные и слабые стороны следующих инструментов:
Вы считаете, что использование только одного из этих инструментов является адекватным?
Я не ищу рекомендации (я могу найти много таких), но прямое сравнение между доступными инструментами.
Существует, конечно, список википедии. Этот список - это просто список, а не сравнение, но один из ссылок на странице, по крайней мере, частично отвечает на ваш вопрос и (очень кратко) упоминает пару программ, которые вы указали.
Использование -Wall должно быть само собой разумеющимся для каждого c-разработчика. Кроме того, использование -Wextra может быть хорошей идеей.
Splint может найти другие потенциальные недостатки в вашем приложении, но в большинстве случаев (!) он печатает ложные предупреждения, поэтому вам нужно понять, что означает шина с каким предупреждением, и в большинстве случаев вам приходится вставлять аннотации, такие как/out/or/unused/в вашем коде, поэтому шина не кричит на вас. С шиной вы должны отфильтровывать предупреждения, которые не важны для вас, иначе вы потратили слишком много времени на анализ и прокрутку множества сообщений.
Обратите внимание, что эти инструменты выполняют только статическую проверку кода. Вы должны использовать valgrind для поиска утечек памяти во время выполнения.
Я использовал шину пару раз и нашел ее слишком многословной: I отключено большинство предупреждений. Я думаю, что этот инструмент может обеспечить интересные результаты, если вы правильно комментируете свой код. Без кода аннотация, этот инструмент не очень помогает.
Я иногда использую разреженный и рассматриваю его как ценный инструмент. Это обеспечивает
обертка вокруг gcc, называемая "cgcc". В результате его просто запустить
разреженный в программе, даже если он содержит много исходных файлов (export
CC=cgcc
и voilà). Эта программа работает лучше всего, если вы анализируете
Исходный код ядра.
В качестве побочного я также регулярно использую pmccabe. pmccabe не является статический анализатор: он вычисляет циклическую сложность. Это может помочь вам найти самые сложные функции в вашей программе. Эти функции вероятно, будет подвержен ошибкам и трудно проверить.