22
Опыт портирования Windows-only проекта на Linux ПАВЕЛ БЕЛИКОВ PVS-STUDIO

Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Embed Size (px)

Citation preview

Page 1: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Опыт портирования Windows-only проекта на LinuxПАВЕЛ БЕЛИКОВ

PVS-STUDIO

Page 2: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Проблемы портирования• Миф о стандартном C++

• Мало перенести ядро анализатора

• Необходимы инструменты для проверки проекта

• Необходимы средства просмотра отчёта

Page 3: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Системы сборки Windows: MSBuild

Linux:

• CMake

• qmake

• qbs

• autotools

• waf

• Scons

• GYP

• bazel

• Не поддающееся подсчёту множество скриптов и Makefile

Page 4: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Мониторинг сборки• Переменные окружения CC, CXX (пример: scan-build)

• strace

Page 5: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

JSON Compilation Database• Описание всех команд компиляции в проекте

• Не нужно пересобирать приложение

[

{ "directory": "/home/user/projects/test",

"command": "/usr/bin/c++ file.cpp",

"file": "file.cpp" },

...

]

Page 6: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Bear• Использует LD_PRELOAD

• Не собирает информацию о переменных окружения

• Проблемы дистрибуции (разные версии glibc)

Page 7: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Почему нельзя проверять исходники?• Нельзя получить информацию о типах, а следовательно и провести статический анализ

• Статический анализ по регуляркам не статический анализ

• C++ парсер без знания типов написать невозможно

Но если очень хочется, то можно:

pvs-studio-analyzer trace -- g++ *.cpp -o dummy

pvs-studio-analyzer analyze ...

plog-converter ...

Page 8: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Система тестирования• 34 новых (и не очень) проектов под Linux

• За основу взят мониторинг сборки deb-пакетов через apt

• 120 + 34 > 120

• Больше C

• Больше современного C++

• Больше шаблонов

Page 9: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Система тестирования

Page 10: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Документация• Любой продукт должен содержать документацию

• Она должна быть удобной

• Но читают её не все

Page 11: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Дистрибуция• Архив исключительно на крайний случай – он неудобен

• Нужны deb и rpm, желательно с репозиториями

• Нужно работать на огромном зоопарке дистрибутивов

• И всё это нужно тестировать

Page 12: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Интерфейс• Текстовый конфигурационный файл – это конечно Unix-way

• Но без CLI неудобно

Page 13: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Методология статического анализа• Анализатор – инструмент разработчика

• Использовать его только в CI нельзя

Page 14: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Интеграция в IDE• IDE у каждого своё: от Unix as IDE до CLion

• Плагины ко всему писать невозможно

• Время обратиться к Unix-way: проще всего интегрироваться в систему сборки

• Плюс: поддерживается инкрементальный анализ и (почти) любая IDE

• Минус: интегрироваться сложно

• Для CMake и qmake мы написали модули для облегчения интеграции

Page 15: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

QtCreator + qmake

Page 16: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

CLion + CMake

Page 17: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Vim в качестве просмотрщика лога

Page 18: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Просматривать логи можно и в QtCreator

plog-converter -t tasklist -o PVS-Studio.tasks PVS-Studio.log

Tasks – формат QtCreator для удобной загрузки сообщений в окно Issues.

Page 19: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Что дальше?• Вроде всё готово?

• Нееееееееет.

• Осталось море работы по поддержке GCC и Clang

• Расширения компиляторов

• Уменьшение количества ложных срабатываний

Page 20: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Расширения 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; \)}

Page 21: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Что у нас получилось• Работать на разных дистрибутивах

• Устанавливаться из пакетов (и даже репозиториев)

• Сделать инструменты для быстрой проверки

• Сделать инструменты для интеграции в билд-сервер

• Сделать инструменты для программиста

А ещё мы проверили много проектов, включая ядро Linux. Скоро будет статья!

Page 22: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux

Готов ответить на ваши вопросы

Наш сайт: www.viva64.com

Блог на хабре: https://habrahabr.ru/company/pvs-studio/