Upload
platonov-sergey
View
286
Download
2
Embed Size (px)
Citation preview
Опыт портирования Windows-only проекта на LinuxПАВЕЛ БЕЛИКОВ
PVS-STUDIO
Проблемы портирования• Миф о стандартном C++
• Мало перенести ядро анализатора
• Необходимы инструменты для проверки проекта
• Необходимы средства просмотра отчёта
Системы сборки Windows: MSBuild
Linux:
• CMake
• qmake
• qbs
• autotools
• waf
• Scons
• GYP
• bazel
• Не поддающееся подсчёту множество скриптов и Makefile
Мониторинг сборки• Переменные окружения CC, CXX (пример: scan-build)
• strace
JSON Compilation Database• Описание всех команд компиляции в проекте
• Не нужно пересобирать приложение
[
{ "directory": "/home/user/projects/test",
"command": "/usr/bin/c++ file.cpp",
"file": "file.cpp" },
...
]
Bear• Использует LD_PRELOAD
• Не собирает информацию о переменных окружения
• Проблемы дистрибуции (разные версии glibc)
Почему нельзя проверять исходники?• Нельзя получить информацию о типах, а следовательно и провести статический анализ
• Статический анализ по регуляркам не статический анализ
• C++ парсер без знания типов написать невозможно
Но если очень хочется, то можно:
pvs-studio-analyzer trace -- g++ *.cpp -o dummy
pvs-studio-analyzer analyze ...
plog-converter ...
Система тестирования• 34 новых (и не очень) проектов под Linux
• За основу взят мониторинг сборки deb-пакетов через apt
• 120 + 34 > 120
• Больше C
• Больше современного C++
• Больше шаблонов
Система тестирования
Документация• Любой продукт должен содержать документацию
• Она должна быть удобной
• Но читают её не все
Дистрибуция• Архив исключительно на крайний случай – он неудобен
• Нужны deb и rpm, желательно с репозиториями
• Нужно работать на огромном зоопарке дистрибутивов
• И всё это нужно тестировать
Интерфейс• Текстовый конфигурационный файл – это конечно Unix-way
• Но без CLI неудобно
Методология статического анализа• Анализатор – инструмент разработчика
• Использовать его только в CI нельзя
Интеграция в IDE• IDE у каждого своё: от Unix as IDE до CLion
• Плагины ко всему писать невозможно
• Время обратиться к Unix-way: проще всего интегрироваться в систему сборки
• Плюс: поддерживается инкрементальный анализ и (почти) любая IDE
• Минус: интегрироваться сложно
• Для CMake и qmake мы написали модули для облегчения интеграции
QtCreator + qmake
CLion + CMake
Vim в качестве просмотрщика лога
Просматривать логи можно и в QtCreator
plog-converter -t tasklist -o PVS-Studio.tasks PVS-Studio.log
Tasks – формат QtCreator для удобной загрузки сообщений в окно Issues.
Что дальше?• Вроде всё готово?
• Нееееееееет.
• Осталось море работы по поддержке GCC и Clang
• Расширения компиляторов
• Уменьшение количества ложных срабатываний
Расширения GCCint *p = x ? : y; switch (x) {
case 0 ... 50: return 0; default: return 1;};
void *l = &&label;goto *l;
И многое другое, не всегда документированное
#define min(a,b) = ({ \ typeof(a) _a = a; \ typeof(b) _b = b; \ a > _b ? _a : _b; \)}
Что у нас получилось• Работать на разных дистрибутивах
• Устанавливаться из пакетов (и даже репозиториев)
• Сделать инструменты для быстрой проверки
• Сделать инструменты для интеграции в билд-сервер
• Сделать инструменты для программиста
А ещё мы проверили много проектов, включая ядро Linux. Скоро будет статья!
Готов ответить на ваши вопросы
Наш сайт: www.viva64.com
Блог на хабре: https://habrahabr.ru/company/pvs-studio/