Инструменты анализа кода C ++ - PullRequest
7 голосов
/ 13 февраля 2009

Я сейчас нахожусь в процессе изучения C ++, и поскольку я все еще учусь, я продолжаю делать ошибки.
С таким разрешительным языком, как C ++, часто требуется много времени, чтобы понять, что именно не так - потому что компилятор позволяет мне многое сойти с рук. Я понимаю, что эта гибкость является одним из основных преимуществ C ++, но затрудняет изучение базового языка.
Есть ли какой-то инструмент, который я могу использовать для анализа своего кода и внесения предложений на основе передового опыта или просто разумного кодирования? Желательно как плагин Eclipse или приложение linux.

Ответы [ 8 ]

17 голосов
/ 13 февраля 2009

Включить максимальное количество предупреждений компилятора (это опция -Wall, если вы используете компилятор Gnu).

'Lint' - это архетипический инструмент статического анализа.

valgrind - хороший анализатор времени выполнения.

6 голосов
/ 13 февраля 2009

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

Я предлагаю вам прочитать серию книг Effective C ++ и ** Effective STL , как минимум См. Alsot Полное руководство и список книг C ++

5 голосов
/ 13 февраля 2009

Для g ++, а также для включения -Wall, включите также -pedantic и приготовьтесь удивляться количеству обнаруженных проблем!

3 голосов
/ 16 февраля 2009

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

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

Поместите внешние заголовки, которые мне нужно включить, в отдельный файл, и в начале этого файла перед положением включаемых файлов:

#pragma GCC system_header

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

3 голосов
/ 13 февраля 2009

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

Если вам нужно что-то более тяжелое, вы можете попробовать PC-Lint, если у вас установлена ​​ Windows , которая по-прежнему является одним из лучших инструментов Lint для C ++. Просто имейте в виду, что вам нужно будет настроить эти инструменты, чтобы они отражали ваш стиль кодирования, иначе вы будете забиты предупреждениями и не сможете увидеть дрова для деревьев. Да, это стоит денег, и это, вероятно, немного излишне, если вы не занимаетесь C ++ на уровне «платят за это», но я считаю это бесценным.

3 голосов
/ 13 февраля 2009

Поддержка инструментов для C ++ довольно плоха по сравнению с Java, C # и т. Д., Поскольку она не имеет контекстно-свободной грамматики. Фактически, есть части грамматики C ++, которые неразрешимы. По сути, это означает, что для понимания кода C ++ на синтаксическом уровне требуется реализация в значительной степени внешнего интерфейса компилятора с семантическим анализом. C ++ нельзя анализировать в AST независимо от семантического анализа, и большинство инструментов анализа кода в IDE и т. Д. Работают на уровне AST. Это часть компромисса, который вы заключаете в обмен на гибкость и обратную совместимость C ++.

2 голосов
/ 13 февраля 2009

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

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

Скачайте и попробуйте некоторые бесплатные инструменты отладки, например GDB , они могут помочь вам исследовать память и т. Д. Без необходимости писать собственный код.

2 голосов
/ 13 февраля 2009

lint - есть много версий, но если вы ищете Google для lint, вы должны найти ту, которая работает. Другая вещь, которую нужно сделать, это включить предупреждения вашего компилятора - если вы используете gcc / g ++, опция -Wall.

CppChecker может оказаться полезным в качестве плагина для Eclipse, поддерживающего gcc / PC lint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...