Павел Беликов, Опыт мигрирования крупного проекта с...
TRANSCRIPT
![Page 1: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/1.jpg)
Опыт портирования Windows-only проекта на LinuxПАВЕЛ БЕЛИКОВ
PVS-STUDIO
![Page 2: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/2.jpg)
Проблемы портирования• Миф о стандартном C++
• Мало перенести ядро анализатора
• Необходимы инструменты для проверки проекта
• Необходимы средства просмотра отчёта
![Page 3: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/3.jpg)
Системы сборки Windows: MSBuild
Linux:
• CMake
• qmake
• qbs
• autotools
• waf
• Scons
• GYP
• bazel
• Не поддающееся подсчёту множество скриптов и Makefile
![Page 4: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/4.jpg)
Мониторинг сборки• Переменные окружения CC, CXX (пример: scan-build)
• strace
![Page 5: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/5.jpg)
JSON Compilation Database• Описание всех команд компиляции в проекте
• Не нужно пересобирать приложение
[
{ "directory": "/home/user/projects/test",
"command": "/usr/bin/c++ file.cpp",
"file": "file.cpp" },
...
]
![Page 6: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/6.jpg)
Bear• Использует LD_PRELOAD
• Не собирает информацию о переменных окружения
• Проблемы дистрибуции (разные версии glibc)
![Page 7: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/7.jpg)
Почему нельзя проверять исходники?• Нельзя получить информацию о типах, а следовательно и провести статический анализ
• Статический анализ по регуляркам не статический анализ
• C++ парсер без знания типов написать невозможно
Но если очень хочется, то можно:
pvs-studio-analyzer trace -- g++ *.cpp -o dummy
pvs-studio-analyzer analyze ...
plog-converter ...
![Page 8: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/8.jpg)
Система тестирования• 34 новых (и не очень) проектов под Linux
• За основу взят мониторинг сборки deb-пакетов через apt
• 120 + 34 > 120
• Больше C
• Больше современного C++
• Больше шаблонов
![Page 9: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/9.jpg)
Система тестирования
![Page 10: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/10.jpg)
Документация• Любой продукт должен содержать документацию
• Она должна быть удобной
• Но читают её не все
![Page 11: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/11.jpg)
Дистрибуция• Архив исключительно на крайний случай – он неудобен
• Нужны deb и rpm, желательно с репозиториями
• Нужно работать на огромном зоопарке дистрибутивов
• И всё это нужно тестировать
![Page 12: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/12.jpg)
Интерфейс• Текстовый конфигурационный файл – это конечно Unix-way
• Но без CLI неудобно
![Page 13: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/13.jpg)
Методология статического анализа• Анализатор – инструмент разработчика
• Использовать его только в CI нельзя
![Page 14: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/14.jpg)
Интеграция в IDE• IDE у каждого своё: от Unix as IDE до CLion
• Плагины ко всему писать невозможно
• Время обратиться к Unix-way: проще всего интегрироваться в систему сборки
• Плюс: поддерживается инкрементальный анализ и (почти) любая IDE
• Минус: интегрироваться сложно
• Для CMake и qmake мы написали модули для облегчения интеграции
![Page 15: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/15.jpg)
QtCreator + qmake
![Page 16: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/16.jpg)
CLion + CMake
![Page 17: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/17.jpg)
Vim в качестве просмотрщика лога
![Page 18: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/18.jpg)
Просматривать логи можно и в QtCreator
plog-converter -t tasklist -o PVS-Studio.tasks PVS-Studio.log
Tasks – формат QtCreator для удобной загрузки сообщений в окно Issues.
![Page 19: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/19.jpg)
Что дальше?• Вроде всё готово?
• Нееееееееет.
• Осталось море работы по поддержке GCC и Clang
• Расширения компиляторов
• Уменьшение количества ложных срабатываний
![Page 20: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/20.jpg)
Расширения 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](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/21.jpg)
Что у нас получилось• Работать на разных дистрибутивах
• Устанавливаться из пакетов (и даже репозиториев)
• Сделать инструменты для быстрой проверки
• Сделать инструменты для интеграции в билд-сервер
• Сделать инструменты для программиста
А ещё мы проверили много проектов, включая ядро Linux. Скоро будет статья!
![Page 22: Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux](https://reader038.vdocuments.net/reader038/viewer/2022103010/5884c91e1a28ab767c8b4b5b/html5/thumbnails/22.jpg)
Готов ответить на ваши вопросы
Наш сайт: www.viva64.com
Блог на хабре: https://habrahabr.ru/company/pvs-studio/