Gres

Делаем разработку проще

Cppcheck в Qt Creator

Описание

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

Одним из них является выполнение статического анализа исходного кода. Проведение подобного анализа позволяет определить возможные ошибки без выполнения и отладки программы. Cppcheck является одним из лучших свободных инструментов для статического анализа исходного кода программ, написанных на C/C++.

Другим является использование интегрированных сред разработки (IDE), позволяющих упростить процесс разработки путем объединения различных инструментов под одной оболочкой. Достаточно популярной и активно развивающейся IDE является Qt Creator .

Однако использование Cppcheck в Qt Creator имеет весьма существенные ограничения. При использовании анализатора в качестве внешнего инструмента возможен лишь ручной запуск с фиксированным набором параметров, а также последующий ручной анализ результатов его выполнения.

Qt Creator Cppcheck integration plugin (QtcCppcheck) позволяет избавиться от подобных неудобств. Используя возможности расширения Qt Creator, QtcCppcheck обеспечивает более удобное и незаметное использование анализатора.

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

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

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

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

Скачать

Скомпилированный плагин

Исходники

Подробнее

Более подробная информация об использовании и настройках приведена на этой странице.

46 комментариев

  1. Что-то не работает. QTC 3.5.0, Linux 32-bit. cppcheck v. 1.54
    cppcheck ругается на неправильные параметры: cppcheck: there is no —enable parameter with the name ‘warning’

  2. Не могу заставить плагин работать 🙁
    Скачал QtcCppcheck-3.6.0-linux-x64.tar.gz
    Скопировал share и lib в Qt/Tools/QtCreator.
    Включил QtcCppcheck в Installed Plugins.

    Скачал отсюда cppcheck 1.71.
    http://sourceforge.net/projects/cppcheck/

    Собрал командой «make».

    Положил cppcheck в свой $HOME/bin (есть в путях).

    В настройках Options->Analyzer->QtcCppcheck поставил путь к cppcheck.
    Включил все крыжики, нажал Apply.

    Перезапустил Qt creator.

    Написал такую байду:
    int fasdf() {
    int d[5];
    return d[15433];
    }

    Сделал в коде вызов этой функции, убедился, что есть segfault.

    Запускаю Scan with cppcheck. — В issues пустота.

    • Разобрался. Надо было подложить файлы конфигурации cppcheck из папки где я его собирал в папку, куда я его скопировал. Т.е.. в мой $HOME/bin.
      Теперь, кажется, работает 🙂

      • Как же все-таки хорошо, когда проблемы успевают решиться до того, как о них узнаешь :))
        У меня тоже вместе с exe’шником лежит. Можно вроде при компиляции указать конкретный путь через переменную CFGDIR, но раз работает, то лучше не трогать 🙂

  3. Privet!

    Thank you for this great plugin. Well done and keep going on 🙂

    Spasiba.
    Lucio

  4. Замеченные проблемы:
    1) При неправильно указанном пути к екзешнику cppcheck — падает вместе с креатором.
    2) В настройках креатора (3.5.1) у страницы нет названия, только иконка.
    3) С иконкой тоже непонятно: в исходниках иконка указана, но в проекте её нет.

    • Спасибо за отзыв.
      1) Исправил. На ассерт нарывался.
      2) Это из-за того, что отключен плагин Valgrind’а — он давал название категории настроек. Но на всякий случай добавил и себе в плагин.
      3) Иконка берется из исходников плагина Valgrind’а.
      Пересобирать и выкладывать сейчас не буду — баги вроде не критичные.

      • Да как сказать. А если есть несохранённые файлы, а он упал?
        В любом случае спасибо за плагин.

        • Если exe’шник задан правильно или вообще не задан — не упадет. Ну или для верности можно отключить автоматическую проверку.
          Ассерт был на прогресс бар (справа внизу) — он не успевал создаваться при ошибке запуска. Так что падает только при попытке проверки.
          Но если очень хочется — скажи какая ОС — соберу индивидуально 🙂

          • Я ж не для себя, я для народа 🙂 Багу я вычислил, уже не попадусь. А, вот ещё непонятка: когда нажимаешь справку по параметрам cppcheck — окошко открывается и улетает куда-то на задний план, и переключиться на него можно только закрыв настройки. Винда 8.1, креатор распоследний.

          • Ага, есть такое дело — это из-за модальности окна настроек. Настройки модальные — всегда наверху, параметры нет — прячутся на задний план. Если сделать и параметры тоже модальными, то на них всегда будет фокус и в настройки нельзя будет ничего не ввести. Замкнутый круг. Хоть обратно выпиливай 🙂
            Хотя наверно параметры все-таки модальными тоже сделаю — чтобы их хоть увидеть нормально можно было, а потом сразу и закрыть..

  5. Здравствуйте.
    Пытаюсь установить плагин (QtCreator 3.4.2, QtcCppcheck-3.5.0-win)
    Загрузчик модулей QtCreator сообщает:
    «Не удалось разрешить зависимость «Core(3.5.0)»
    Не удалось разрешить зависимость «ProjectExplorer(3.5.0)»».

    Хотелось бы под 3.4.2

    • Здравствуйте.
      Версия плагина должна соответствовать версии ИДЕ (за исключением последней цифры, она может и отличаться). Так что вам подойдет плагин с версией 3.4.0.

      • Здравствуйте.
        Стоит QtCreator 3.6.82 (4.0.0-beta1), версии плагина 3.6 и 4.0 обе ругаются на зависимости. Как починить?

        • Здравствуйте.
          С бетой не проверял, но 3.6 работает на 3.6, а 4.0. — на 4.0 🙂 Так что советую обновить до 4.0.
          Если же надо именно под бету, то придется пересобирать вручную из исходников, раз не работает.

  6. Здравствуйте, ваш плагин выглядит очень интересным, но, к сожалению, из-за врождённой криворукости не смог заставить его работать. Не подскажите, куда именно нужно залить вашу dll?

    Пробовал в C:\Qt\Tools\QtCreator\lib\qtcreator\plugins, но qt его не увидел.

    Qt creator 3.4.1
    Qt 5.4 minGW

  7. Кстати, еще можно добавить в файл проекта следующие строчки для автоматической генерации бинарных файлов перевода:
    QMAKE_EXTRA_COMPILERS+=lrelease
    lrelease.input=TRANSLATIONS
    lrelease.output=\${QMAKE_FILE_PATH}/\${QMAKE_FILE_BASE}.qm
    lrelease.commands=\$\$[QT_INSTALL_BINS]/lrelease \${QMAKE_FILE_IN} -qm \${QMAKE_FILE_PATH}/\${QMAKE_FILE_BASE}.qm
    lrelease.CONFIG+=no_link
    PRE_TARGETDEPS+=compiler_lrelease_make_all

    • Спасибо, попробую.
      Но я что-то подобное в других проектах делал — в итоге мне qmake при каждой сборке выдавал по несколько предупреждений. Надеюсь, здесь другая ситуация 🙂

  8. Плагин очень востребован. Спасибо за реализацию.
    Но у меня одного не работает —suppressions-list=/path/to/suppressions.txt в качестве пользовательского параметра?
    Т.е. параметр как будто игнорируется. Хотя если специально набрать неправильный путь до файла, то в выводе будет сообщение о неправильном пути.
    Сам cppcheck данный параметр отрабатывает нормально, т.е. скрывает из вывода записи указанные в файле.
    Система ArchLinux, Qt Creator 3.4.1, Qt 5.4.2, cppcheck 1.69, qtc-cppcheck f82377d коммита.

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

  9. Соберите плагин под 3.4.1

  10. Отличный плагин. Единственное неудобство — очень сложная установка, требующая сборки крейтора. Почему не хотетите отправить плагин разрабам для включения в основной репозиторий?
    И ище, если честно — очень неудобный у вас блог, не думали как-то переделать? Также хотелось бы иметь больше ссылок на ваши соц.сети, для более удобного общения, твиттер например или Вконтакте.
    Плагинам решительно нужна бо’льшая реклама, можно было бы снять краткие видеоролики с демонстрацией установки и использования, могу оказать содействие.

    • Отвечу по порядку:

      Пересобирать не обязательно, т.к. я выкладываю уже собранные версии на sourceforge (ссылки есть на странице каждого плагина). Общая ссылка на профиль: https://sourceforge.net/u/onemoregres/profile/.
      Для их установки достаточно скопировать файлы из архива в папку с Qt Creator’ом.
      Компилировать надо, если используется какая-то специфическая версия IDE. Как это делать, я раньше описывал.
      Разработчикам думал отправить, если изменю плагин на более общий (не только под cppcheck), но пока от этой идеи отказался.

      Что именно не нравится в блоге? Внешний вид/структура/наполнение? Вообще сайт изначально задумывался не как блог, а как хоть какое-то использование купленного для экспериментов хостинга 🙂 Но раз уж сделал — надо что-то и написать 🙂
      А в соц сетях меня нет. Только почта. Только хардкор 🙂 Даже в скайп только по праздникам выхожу 🙂

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

      • Спасибо за развернутый ответ!
        Выложенные плагины действительно поехали (cppcheck). Получается он собран msvc2013 32-bit как и крейтор предлагаемый для скачивания на офф. сайте?
        По поводу блога, да — внешний вид и структура. Понимаете, я бы и не стал никогда говорить такого владельцу сайта\блога — хозяин барин, как говориться. Но дело в том, что я считаю вашу работу (плагины для QtCreator’а) очень полезной и высококачественной, и в сравнении с ней, — сайт выглядит на несколько порядков (в сотни раз) хуже, а для 2015 года — просто отвратительно и безвкусно( Получается, как брилиант в плохой оправе, а ведь встречают — по одёжке.
        Элементарно, чтобы оставить комментарий, я должен каждый раз вводить имя и email — это не спортивно.
        Насчёт рекламы — имелось ввиду чтобы в сети было больше инофрмации о вашем продукте, чтобы пользователи могли её легче найти, т.е. я говорю о раширении информационного поля как такового, а не о комерческой рекламе.
        С уважением.

        • Да, msvc2013. Сам удивился, когда только что собранный по старинке плагин вдруг начал ронять свежий Qt Creator 🙂
          Насчет блога. Open source программы постоянно упрекают за никакой интерфейс, т.к. над ними работают в основном программисты, а не дизайнеры. Сайты не исключение 🙂 Посмотрю, конечно, что можно сделать, но не уверен, что выйдет намного лучше 🙂
          Про рекламу я так и понял. Но основное вроде сделано: есть русское описание, если исходники и бинарники с английским описанием. В гугле по запросу «qt creator + смысл плагина» хотя бы что-то на первых страницах обычно появляется.. Хз, что еще нужно. Ну вики qt’шную наверно можно обновить.. В соц.сетях не зареген, поэтому лайкать и делиться не могу.
          Но повторюсь: от чужой помощи не отказываюсь. Если при случае поделитесь ссылкой на плагин, возражать не буду 🙂
          С не меньшим уважением 🙂

  11. Доброго времени суток, возник небольшой вопрос по установке. В архиве с готовым бинарем отсутствует описание плагина (.pluginspec)
    Попытка собрать из исходников — провалилась. Вопрос, как сгенерировать нужный файл (.pluginspec)?
    QMake version 3.0 Using Qt version 5.2.1 in /usr/lib/x86_64-linux-gnu

    • Если не изменяет память, .pluginspec стал ненужным начиная с версии 3.3.0 (вместо него появился .json, но он только для компиляции). Соответственно, его можно найти в более ранних версиях бинарников/исходников.

  12. Соберите плагин под 3.3.1 (windows, mingw)

    • Под windows распространяется Qt creator, собранный Visual Studio 2010. Соответственно и плагин нужен аналогичный и сборка mingw с ним не заработает.

  13. Отличные плагины!
    Очень удобно пользоваться!
    В целом, огромное спасибо за проделанную работу!

  14. С чем может быть связана такая ошибка?

    Cppcheck запущен
    ,,information,missingInclude,Cppcheck cannot find all the include files (use --check-config for details)

    • Это стандартное предупреждение Cppcheck о том, что он не смог найти всех заголовочных файлов, которые используются в анализируемых исходниках.
      Для решения можно явно указать пути к используемым файлам через -I [dir].
      Делается это через задание пользовательских параметров в настройках плагина. Доступные параметры можно посмотреть, кликнув по кнопку «?» справа от поля их ввода.
      Правда задать можно не все из доступных, т.к. плагин перезаписывает наиболее критичные для его работы.

      Есть и другие варианты решения, но они так или иначе заключаются в игнорировании сообщения 🙂

  15. есть такой проект http://sourceforge.net/projects/qtprojecttool/files/
    он достаточно стабильный и с установкой всё чётко (три строчки и ни о чем думать не надо) . QtcCppcheck мне поставить так и не удалось, на этапе компиляции уже начались проблемы. может вам стоит объединиться ? так как (мне лично) понравилось наличие в QtcCppcheck возможности по настройке проверки

    • В свое время рассматривал возможности Qt Project Tool в надежде найти подходящий инструмент для интеграции cppcheck.
      Но, насколько я помню, в основном меня не устроило наличие единственного варианта использования анализатора. А именно в качестве внешнего инструмента (без возможности автоматического запуска).
      Чтобы добавить эту возможность, надо править код самого Qt Creator’а, что показалось (да и кажется) гораздо сложнее, чем написать свой небольшой велосипед :).
      Плюс qtp позиционирует себя как общий инструмент для вызова любых программ и учитывать в нем специфику одной из этих программ было бы неправильно (ИМХО).
      А вообще спасибо за предложение. Еще раз присмотрюсь к этому проекту. Возможно все-таки найду, чем его (или за счет его) можно улучшить.

      Насчет проблем QtcCppcheck. В чем именно заключаются проблемы? Под версию 3.2 еще и сам не пробовал собирать (после релиза пересоберу/подправлю). Под 3.1 и 3.1.1 собирался без проблем (со скачанных отсюда http://qt-project.org/downloads). Под windows рекомендую скачать уже собранные.
      По стабильности да, некоторые баги и недоработки еще есть. По установке вроде просто: скопировать плагин и указать путь к cppcheck.

      • Инструкция по компиляции не помешала бы. Я так понял на Linux-е вы не тестировали. Я пробовал скомпилировать но меня остановило то что оно ищет исходники Qt Creator. А возится со сборкой Qt Creator в Linux-е как то мне не охота. В этом и есть плюс Qt Project Tool — легкость компиляции. Но это уже скорее недостаток системы плагинов Qt Creator, а не ваш. А так то да, ваш плагин правильнее идеологически. Я вот запускаю cppcheck с помощью Qt Project Tool только через огромный период времени и получаю на гору кучу ошибок, а можно было сразу по мере поступления так сказать. Однозначно плагин нужный и его надо доработать и сделать официальным.

        • Инструкция есть (http://gres.biz/qtc-plugin-build/). Под Linux тестировал и есть даже собранные бинарники (http://sourceforge.net/projects/qtc-cppcheck/files/bin/). В ближайшее время пересоберу под версию 3.2.1.
          А так да, чтобы собрать плагин надо собрать саму ИДЕ. Но здесь плагины друг от друга особо не отличаются. Разве что больше или меньше зависимостей может быть.
          Qt Project Tool полезная штука, но из-за невозможности ее автоматического запуска и был написан этот плагин. Какое-то время работал с eclipse — с тамошней интеграцией стал на автомате писать более «правильный» код. Тогда и захотелось то же самое, но в менее громоздкой ИДЕ 🙂

Обратные ссылки

  1. Добавлена страница плагина Cppcheck для Qt Creator | Gres

Добавить комментарий

Ваш e-mail не будет опубликован.