SR_team
02.02.2024, 11:55
В сети крайне мало толковых билдов под C++. В основном хорошие билды только на web-разработку. В результате расширения очень долго собирались в попытках найти что-то полезное в тонне софта на маркетплейсе, а так же из рекомендаций в рандомных источниках, типа LLVM-канала в ДС. При чем что самое странное - некоторые из расширений очень плохо ищутся по тегу C++ на маркетплейсе, при том, что являются популярными (и при этом их так же нет в подборках).
Сначала пройдусь по C++ экстеншенам, а в конце докину всякого на юзабилити.
Языковой сервер
Microsoft C/C++ - идет на***, ну или почтиРасширение из коробки нормально работает с CMake от того же Microsoft, но оно имеет не очень хороший анализатор кода:
медленный
очень медленный если надо что-то порефакторить или найти ссылки
не всегда показывает результат compile-time выражений
часто не правильно разбирает исходники, показывая ошибки там где их нет (особенно часто при кросскомпиляции)
Итого из плюсов у него остается лишь подкидывание авто-сгенерированого дебаг конфига для CMake. Но этот конфиг работает хорошо только для текущей платформы.
Если решили оставлять расширение ради кнопочки дебага с авто-сгенерированым конфигоом, то отключайте Intelli Sense Engine:
JSON:
{
"C_Cpp.intelliSenseEngine"
:
"Disabled"
}
Настоящий языковой сервер C++clangd (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWxsdm0tdnMtY29kZS1leHRlbnNpb25z LnZzY29kZS1jbGFuZ2Q) и C-mantic (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXRkZW5uaXM0NDk2LmNtYW50aWM)- вместе дают защеку некоторым большим IDE, типа CLion. При том, что второй даже не надо настраивать
clangd не имеет интеграции с CMake и другими системами сборки, так что для него надо экспортировать compile_commands.json (у CMake это флаг
-DCMAKE_EXPORT_COMPILE_COMMANDS=1
)
Замечание: clangd и C-mantic оба имеют функцию переключения между исходником и заголовком, но C-mantic делает это лучше, когда файлы находятся в разных папках
VSCode (клиент):
0.1.28 (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvR0VqTFpGYXFDQVlzeFND) (актуальная версия)
0.1.25 (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvbVlZSGZaV2NLU3BMak1u)
Сервер:
ArchLinux AUR (https://www.blast.hk/redirect/aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9jbG FuZ2Qtb3B0LWdpdA) (всегда самая актуальная версия)
Бинарные версии (лучше собирать самому из AUR):
19.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvU2tSV2JZN3RUQWJYbXE5)
Windows:
19.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvcVlxcFJHcHhYWVh0cWd3) (актуальная версия)
18.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvbUNERmt4c25FZnJuYlF4)
Все версии патченых клиента и сервера: https://nc.sr.team/s/YbgbaJ2DwqPGXJe (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvWWJnYmFKMkR3cVBHWEpl)
Установка:
Для винды распаковываете сервер куда вам удобно, а для ArchLinux он ставится по пути
/opt/clangd/bin/clangd
После этого в настройках клиента (расширения) указываете путь к clangd
Если не установить сервер, то из всех фич будут работать только фичи № 14, 15, 16 и 17
Если наоборот не устанавливать клиент, а использовать только патченый сервер с официальным расширением, то не будут работать фичи № 14, 15, 16, 17, а так же у фичи №2 не будет работать открытие ссылок
Фичи патченого clangd:
1. Поддержка doxygen-документации
2. CodeLens - добавляет над функциями, классами и типами ссылки на использование/наследования (при клике показывает все ссылки)
Отключить можно добавив в настройках расширения аргумент
--code-lens=false
3. Postfix completion - добавляет в автодополнение виртуальные операции для генерации свитчей, циклов и кастов
Видео-демка (https://www.blast.hk/redirect/aHR0cHM6Ly9hc2NpaW5lbWEub3JnL2Evcnh5b2ljWDQ0eWEyak xEcGRiTmozclZjQw) (смотреть обязательно - топ фича от sammcall)
4. inlay hints для паддингов
5. Отображение размеров и оффсетов в HEX, когда значение больше 10
6.Отображение масок для битовых полей (IDA показывает их через маски)
7.Отображение оффсета и размера указателя на функцию в виртуальной таблице
8. Отображение имен аргументов в указателях на функции (в обычной версии отображаются только типы)
* В 19.x эта фича принята в основной clangd и может работать без патченой версии
9. Отображение суммарного количества всех паддингов в структуре
10. Частичная поддержка non-self-contained заголовков
11. Подписывание имен аргументов для функций врапперов
12. Если есть вызов шаблонного типа, то он диагностируется с первым вариантом вызова (без компиляции)
13. Поддержка hoisting-функций для оборачивания выделенного кода в новую функцию
14. Открытие cppreference.com и boost.org при нажатии Shift+F1, когда курсор находится на функции/типе из STL или буста
15. Интеграция с CMake (можно не экспортировать compile_commands.json для clangd)
16. Из контекстного меню удалены пункты для открытия AST и переключения между хидером и заголовком: первое на*** не нужно, а второе есть в C-mantic
17. Автоматическая настройка resource dir для clang компиляторов
Clang юзает часть хидеров (например хидеры санитайзеров) из папки рядом с компилятором, и эти хидеры могут отличаться в разных поставках clang
Поиск ошибокОтладчикКак говорилось выше, можно оставить Microsoft C/C++, но есть так же крутое расширение CodeLLDB (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXZhZGltY24udnNjb2RlLWxsZGI)
CodeLLDB крут тем, что это очень качественная обертка над lldb - можно задать команды инициализации и даже больше:
можно генерировать HTML через брейкпоинты строя графики, или записывая логи;
поддерживается reverse-отладка (когда выполнение кода откатывается назад)
удаленная отладка (например под android (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW5pc2FyZ2poYXZlcmkuYW5kcm9pZC1k ZWJ1Zw))
Статический анализаторclangd уже имеет часть аналитик от clang-static-analyzer и интеграцию с clang-tidy, но там доступны только быстрые проверки
Более медленные проверки, такие как утечки памяти можно запустить через CodeChecker (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWNvZGVjaGVja2VyLnZzY29kZS1jb2Rl Y2hlY2tlcg)
CodeChecker поддерживает следующие анализаторы:
clang-static-analyzer
clang-tidy
cppcheck
gcc-static-analyzer (выключен по умолчанию, и подходит в основном только для C)
Из недостатков CodeChecker требует compile_commands.json, а так же, если используется компилятор clang, то что бы он был первый в PATH (иначе могут быть ложные срабатывания)
P.S. clang из дефолтной поставки android-ndk не умеет в CTU (утечки не найдет)
CodeCoverage или просмотр посещенных/не посещенных участков кода при выполненииCoverage Gutters (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXJ5YW5sdWtlci52c2NvZGUtY292ZXJh Z2UtZ3V0dGVycw) выводит информацию из lcov файлов, а сами lcov файлы можно сгенерировать при помощи Lcov Generator (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0ubGNvdi1nZW5lcmF0b3I) (он поддерживает интеграцию с CMake и launch.json)
Данный сниппет включает генерацию profraw/gcda файлов, которые содержат информацию о строках кода, посещенных во время выполнения программы
Makefile:
include
(
CheckCXXCompilerFlag
)
include
(
CheckLinkerFlag
)
function
(
configure_coverage target
)
check_cxx_compiler_flag
(
"-fprofile-instr-generate -fcoverage-mapping"
COMPILER_SUPPORT_LLVM_COVERAGE
)
check_linker_flag
(
CXX
"-fprofile-instr-generate"
LINKER_SUPPORT_LLVM_COVERAGE
)
if
(
COMPILER_SUPPORT_LLVM_COVERAGE AND LINKER_SUPPORT_LLVM_COVERAGE
)
target_compile_options
(
$
{
target
}
PUBLIC -fprofile-instr-generate -fcoverage-mapping
)
target_link_options
(
$
{
target
}
PUBLIC -fprofile-instr-generate
)
else
(
)
check_cxx_compiler_flag
(
"-ftest-coverage"
COMPILER_SUPPORT_GNU_COVERAGE
)
check_linker_flag
(
CXX
"--coverage"
LINKER_SUPPORT_GNU_COVERAGE
)
if
(
COMPILER_SUPPORT_GNU_COVERAGE AND LINKER_SUPPORT_GNU_COVERAGE
)
target_compile_options
(
$
{
target
}
PUBLIC -fprofile-arcs -ftest-coverage
)
target_link_options
(
$
{
target
}
PUBLIC --coverage
)
if
(
$
{
CMAKE_CXX_COMPILER_ID
}
STREQUAL
"Clang"
)
message
(
WARNING
"Clang generate old format of Gcov and it may be incompatible with you toolchains."
)
endif
(
)
endif
(
)
endif
(
)
endfunction
(
)
Использовать примерно так:
Makefile:
add_executable
(
main main.cpp
)
if
(
main_USE_COVERAGE
)
configure_coverage
(
main
)
endif
(
)
Ну и конфигурировать проект с ключом
-D main_USE_COVERAGE=YES
Compiler Explorer или просмотр дизассемблера исходного кода без запуска отладкиC/C++ Compiler explorer (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWhhcmlrcmlzaG5hbjk0LmN4eC1jb21w aWxlci1leHBsb3Jlcg) компилирует текущий файл в ASM и включает line-by-line отображение.
Требует что бы в PATH, или по одному пути с компилятором была утилита c++filt. Для подсветки кода нужно ставить отдельное расширение для asm
Патченная версия с возможностью задать свои аргументы для генерации asm-кода:
cxx-compiler-explorer-0.7.4.vsix (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvcEJhUFRRc0NtcDMzRnpF)
Nextcloud - a safe home for all your data
nc.sr.team
Так же в аргументы можно подкинуть grep через пайп, что бы порезать лишнее и ускорить парсинг (расширение все парсит регексами)
ЮзабилитиГенерация кодаVS Code C++ class generation tool (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWs0bGkuY3BwLWNsYXNzLWdlbmVyYXRv cg) - создание классов через ПКМ по папке (можно создавать сразу пару и .h и .cpp файлов)
Подсветка кодаBetter C++ Syntax (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWplZmYtaHlraW4uYmV0dGVyLWNwcC1z eW50YXg) - фикс подсветки C++ кода. Так же может использоваться другими расширениями, такими как следующее
std::format placeholder highlighter (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPUh1Z29DYWJlbC5zdGQtZm9ybWF0LXBs YWNlaG9sZGVyLWhpZ2hsaWdodGVy)- подсветка фигурных скобок для std::format
Color Identifiers (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPU1hdHRoZXdOZXNwb3IudnNjb2RlLWNv bG9yLWlkZW50aWZpZXJzLW1vZGU)- семантическая подсветка (советую в tokenKinds оставить только variable и parameter)
Doxygen Documentation Generator (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWNzY2hsb3NzZXIuZG94ZG9jZ2Vu) - подсветка doxygen-документации в комментариях, а так же генерация блоков для документации
Error Lens (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXVzZXJuYW1laHcuZXJyb3JsZW5z) - вывод ошибок слева от строки с кодом, как в QtCreator
Build Output Colorizer (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVN0ZXZlQnVzaFJlc2VhcmNoLkJ1aWxk T3V0cHV0Q29sb3JpemVy) - подсветка кода и ошибок, которые выводятся в окно OUTPUT (у CMake будет нормально показывать ошибки компиляции)
ТаскиTasks (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWFjdGJveTE2OC50YXNrcw)- вывод тасков в статусбар (можно выводить не все, выводить группой, а так же задавать иконки и тултипы)
TaskNotify (Fork) (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udGFza25vdGlmeS1mb3Jr ) - вывод уведомлений о завершении тасков
Поведение VSCodeAuto Hide (fork) (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udnNjb2RlLWF1dG9oaWRl LWZvcms)- автоматическое скрытие нижней панели и сайдбаров (можно настроить, что бы все скрывалось по отдельности)
Automatic Editor Sorter (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXpva3VndW4uYXV0b21hdGljLWVkaXRv ci1zb3J0ZXI)- автоматичская сортировка вкладок по алфовиту
cmake-build (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0uY21ha2UtdG9vbHMtYnVp bGQtd3JhcHBlcg) - дополнение для расширения от Microsoft - выводит уведомления об успешной/неуспешной сборке и открывает вывод CMake в случае ошибок
GITGit Graph (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1odXRjaGllLmdpdC1ncmFwaA) - отображение коммитов в виде графа. Оттуда же их можно черипикать и мерджить ветки
GitLess (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1hYXR0ZGQuZ2l0bGVzcw) - не жадная версия GitLens (и inlay hints коммиты тут по ощущению быстрее показывает)
AICodeium (https://www.blast.hk/redirect/aHR0cHM6Ly9jb2RlaXVtLmNvbT9yZWZlcnJhbF9pZD1jM0pmZE dWaGJVQnpjaTUwWldGdA) - просто классный AI-ассистент. Из того, что понравилось - у них своя нейронка для автокомплита, которая работает лучше, чем GH Copilot (сравнивал в июле 2023). В качестве чата классика - ChatGPT
Сначала пройдусь по C++ экстеншенам, а в конце докину всякого на юзабилити.
Языковой сервер
Microsoft C/C++ - идет на***, ну или почтиРасширение из коробки нормально работает с CMake от того же Microsoft, но оно имеет не очень хороший анализатор кода:
медленный
очень медленный если надо что-то порефакторить или найти ссылки
не всегда показывает результат compile-time выражений
часто не правильно разбирает исходники, показывая ошибки там где их нет (особенно часто при кросскомпиляции)
Итого из плюсов у него остается лишь подкидывание авто-сгенерированого дебаг конфига для CMake. Но этот конфиг работает хорошо только для текущей платформы.
Если решили оставлять расширение ради кнопочки дебага с авто-сгенерированым конфигоом, то отключайте Intelli Sense Engine:
JSON:
{
"C_Cpp.intelliSenseEngine"
:
"Disabled"
}
Настоящий языковой сервер C++clangd (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWxsdm0tdnMtY29kZS1leHRlbnNpb25z LnZzY29kZS1jbGFuZ2Q) и C-mantic (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXRkZW5uaXM0NDk2LmNtYW50aWM)- вместе дают защеку некоторым большим IDE, типа CLion. При том, что второй даже не надо настраивать
clangd не имеет интеграции с CMake и другими системами сборки, так что для него надо экспортировать compile_commands.json (у CMake это флаг
-DCMAKE_EXPORT_COMPILE_COMMANDS=1
)
Замечание: clangd и C-mantic оба имеют функцию переключения между исходником и заголовком, но C-mantic делает это лучше, когда файлы находятся в разных папках
VSCode (клиент):
0.1.28 (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvR0VqTFpGYXFDQVlzeFND) (актуальная версия)
0.1.25 (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvbVlZSGZaV2NLU3BMak1u)
Сервер:
ArchLinux AUR (https://www.blast.hk/redirect/aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9jbG FuZ2Qtb3B0LWdpdA) (всегда самая актуальная версия)
Бинарные версии (лучше собирать самому из AUR):
19.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvU2tSV2JZN3RUQWJYbXE5)
Windows:
19.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvcVlxcFJHcHhYWVh0cWd3) (актуальная версия)
18.x (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvbUNERmt4c25FZnJuYlF4)
Все версии патченых клиента и сервера: https://nc.sr.team/s/YbgbaJ2DwqPGXJe (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvWWJnYmFKMkR3cVBHWEpl)
Установка:
Для винды распаковываете сервер куда вам удобно, а для ArchLinux он ставится по пути
/opt/clangd/bin/clangd
После этого в настройках клиента (расширения) указываете путь к clangd
Если не установить сервер, то из всех фич будут работать только фичи № 14, 15, 16 и 17
Если наоборот не устанавливать клиент, а использовать только патченый сервер с официальным расширением, то не будут работать фичи № 14, 15, 16, 17, а так же у фичи №2 не будет работать открытие ссылок
Фичи патченого clangd:
1. Поддержка doxygen-документации
2. CodeLens - добавляет над функциями, классами и типами ссылки на использование/наследования (при клике показывает все ссылки)
Отключить можно добавив в настройках расширения аргумент
--code-lens=false
3. Postfix completion - добавляет в автодополнение виртуальные операции для генерации свитчей, циклов и кастов
Видео-демка (https://www.blast.hk/redirect/aHR0cHM6Ly9hc2NpaW5lbWEub3JnL2Evcnh5b2ljWDQ0eWEyak xEcGRiTmozclZjQw) (смотреть обязательно - топ фича от sammcall)
4. inlay hints для паддингов
5. Отображение размеров и оффсетов в HEX, когда значение больше 10
6.Отображение масок для битовых полей (IDA показывает их через маски)
7.Отображение оффсета и размера указателя на функцию в виртуальной таблице
8. Отображение имен аргументов в указателях на функции (в обычной версии отображаются только типы)
* В 19.x эта фича принята в основной clangd и может работать без патченой версии
9. Отображение суммарного количества всех паддингов в структуре
10. Частичная поддержка non-self-contained заголовков
11. Подписывание имен аргументов для функций врапперов
12. Если есть вызов шаблонного типа, то он диагностируется с первым вариантом вызова (без компиляции)
13. Поддержка hoisting-функций для оборачивания выделенного кода в новую функцию
14. Открытие cppreference.com и boost.org при нажатии Shift+F1, когда курсор находится на функции/типе из STL или буста
15. Интеграция с CMake (можно не экспортировать compile_commands.json для clangd)
16. Из контекстного меню удалены пункты для открытия AST и переключения между хидером и заголовком: первое на*** не нужно, а второе есть в C-mantic
17. Автоматическая настройка resource dir для clang компиляторов
Clang юзает часть хидеров (например хидеры санитайзеров) из папки рядом с компилятором, и эти хидеры могут отличаться в разных поставках clang
Поиск ошибокОтладчикКак говорилось выше, можно оставить Microsoft C/C++, но есть так же крутое расширение CodeLLDB (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXZhZGltY24udnNjb2RlLWxsZGI)
CodeLLDB крут тем, что это очень качественная обертка над lldb - можно задать команды инициализации и даже больше:
можно генерировать HTML через брейкпоинты строя графики, или записывая логи;
поддерживается reverse-отладка (когда выполнение кода откатывается назад)
удаленная отладка (например под android (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW5pc2FyZ2poYXZlcmkuYW5kcm9pZC1k ZWJ1Zw))
Статический анализаторclangd уже имеет часть аналитик от clang-static-analyzer и интеграцию с clang-tidy, но там доступны только быстрые проверки
Более медленные проверки, такие как утечки памяти можно запустить через CodeChecker (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWNvZGVjaGVja2VyLnZzY29kZS1jb2Rl Y2hlY2tlcg)
CodeChecker поддерживает следующие анализаторы:
clang-static-analyzer
clang-tidy
cppcheck
gcc-static-analyzer (выключен по умолчанию, и подходит в основном только для C)
Из недостатков CodeChecker требует compile_commands.json, а так же, если используется компилятор clang, то что бы он был первый в PATH (иначе могут быть ложные срабатывания)
P.S. clang из дефолтной поставки android-ndk не умеет в CTU (утечки не найдет)
CodeCoverage или просмотр посещенных/не посещенных участков кода при выполненииCoverage Gutters (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXJ5YW5sdWtlci52c2NvZGUtY292ZXJh Z2UtZ3V0dGVycw) выводит информацию из lcov файлов, а сами lcov файлы можно сгенерировать при помощи Lcov Generator (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0ubGNvdi1nZW5lcmF0b3I) (он поддерживает интеграцию с CMake и launch.json)
Данный сниппет включает генерацию profraw/gcda файлов, которые содержат информацию о строках кода, посещенных во время выполнения программы
Makefile:
include
(
CheckCXXCompilerFlag
)
include
(
CheckLinkerFlag
)
function
(
configure_coverage target
)
check_cxx_compiler_flag
(
"-fprofile-instr-generate -fcoverage-mapping"
COMPILER_SUPPORT_LLVM_COVERAGE
)
check_linker_flag
(
CXX
"-fprofile-instr-generate"
LINKER_SUPPORT_LLVM_COVERAGE
)
if
(
COMPILER_SUPPORT_LLVM_COVERAGE AND LINKER_SUPPORT_LLVM_COVERAGE
)
target_compile_options
(
$
{
target
}
PUBLIC -fprofile-instr-generate -fcoverage-mapping
)
target_link_options
(
$
{
target
}
PUBLIC -fprofile-instr-generate
)
else
(
)
check_cxx_compiler_flag
(
"-ftest-coverage"
COMPILER_SUPPORT_GNU_COVERAGE
)
check_linker_flag
(
CXX
"--coverage"
LINKER_SUPPORT_GNU_COVERAGE
)
if
(
COMPILER_SUPPORT_GNU_COVERAGE AND LINKER_SUPPORT_GNU_COVERAGE
)
target_compile_options
(
$
{
target
}
PUBLIC -fprofile-arcs -ftest-coverage
)
target_link_options
(
$
{
target
}
PUBLIC --coverage
)
if
(
$
{
CMAKE_CXX_COMPILER_ID
}
STREQUAL
"Clang"
)
message
(
WARNING
"Clang generate old format of Gcov and it may be incompatible with you toolchains."
)
endif
(
)
endif
(
)
endif
(
)
endfunction
(
)
Использовать примерно так:
Makefile:
add_executable
(
main main.cpp
)
if
(
main_USE_COVERAGE
)
configure_coverage
(
main
)
endif
(
)
Ну и конфигурировать проект с ключом
-D main_USE_COVERAGE=YES
Compiler Explorer или просмотр дизассемблера исходного кода без запуска отладкиC/C++ Compiler explorer (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWhhcmlrcmlzaG5hbjk0LmN4eC1jb21w aWxlci1leHBsb3Jlcg) компилирует текущий файл в ASM и включает line-by-line отображение.
Требует что бы в PATH, или по одному пути с компилятором была утилита c++filt. Для подсветки кода нужно ставить отдельное расширение для asm
Патченная версия с возможностью задать свои аргументы для генерации asm-кода:
cxx-compiler-explorer-0.7.4.vsix (https://www.blast.hk/redirect/aHR0cHM6Ly9uYy5zci50ZWFtL3MvcEJhUFRRc0NtcDMzRnpF)
Nextcloud - a safe home for all your data
nc.sr.team
Так же в аргументы можно подкинуть grep через пайп, что бы порезать лишнее и ускорить парсинг (расширение все парсит регексами)
ЮзабилитиГенерация кодаVS Code C++ class generation tool (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWs0bGkuY3BwLWNsYXNzLWdlbmVyYXRv cg) - создание классов через ПКМ по папке (можно создавать сразу пару и .h и .cpp файлов)
Подсветка кодаBetter C++ Syntax (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWplZmYtaHlraW4uYmV0dGVyLWNwcC1z eW50YXg) - фикс подсветки C++ кода. Так же может использоваться другими расширениями, такими как следующее
std::format placeholder highlighter (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPUh1Z29DYWJlbC5zdGQtZm9ybWF0LXBs YWNlaG9sZGVyLWhpZ2hsaWdodGVy)- подсветка фигурных скобок для std::format
Color Identifiers (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPU1hdHRoZXdOZXNwb3IudnNjb2RlLWNv bG9yLWlkZW50aWZpZXJzLW1vZGU)- семантическая подсветка (советую в tokenKinds оставить только variable и parameter)
Doxygen Documentation Generator (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWNzY2hsb3NzZXIuZG94ZG9jZ2Vu) - подсветка doxygen-документации в комментариях, а так же генерация блоков для документации
Error Lens (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXVzZXJuYW1laHcuZXJyb3JsZW5z) - вывод ошибок слева от строки с кодом, как в QtCreator
Build Output Colorizer (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVN0ZXZlQnVzaFJlc2VhcmNoLkJ1aWxk T3V0cHV0Q29sb3JpemVy) - подсветка кода и ошибок, которые выводятся в окно OUTPUT (у CMake будет нормально показывать ошибки компиляции)
ТаскиTasks (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPWFjdGJveTE2OC50YXNrcw)- вывод тасков в статусбар (можно выводить не все, выводить группой, а так же задавать иконки и тултипы)
TaskNotify (Fork) (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udGFza25vdGlmeS1mb3Jr ) - вывод уведомлений о завершении тасков
Поведение VSCodeAuto Hide (fork) (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udnNjb2RlLWF1dG9oaWRl LWZvcms)- автоматическое скрытие нижней панели и сайдбаров (можно настроить, что бы все скрывалось по отдельности)
Automatic Editor Sorter (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPXpva3VndW4uYXV0b21hdGljLWVkaXRv ci1zb3J0ZXI)- автоматичская сортировка вкладок по алфовиту
cmake-build (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0uY21ha2UtdG9vbHMtYnVp bGQtd3JhcHBlcg) - дополнение для расширения от Microsoft - выводит уведомления об успешной/неуспешной сборке и открывает вывод CMake в случае ошибок
GITGit Graph (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1odXRjaGllLmdpdC1ncmFwaA) - отображение коммитов в виде графа. Оттуда же их можно черипикать и мерджить ветки
GitLess (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1hYXR0ZGQuZ2l0bGVzcw) - не жадная версия GitLens (и inlay hints коммиты тут по ощущению быстрее показывает)
AICodeium (https://www.blast.hk/redirect/aHR0cHM6Ly9jb2RlaXVtLmNvbT9yZWZlcnJhbF9pZD1jM0pmZE dWaGJVQnpjaTUwWldGdA) - просто классный AI-ассистент. Из того, что понравилось - у них своя нейронка для автокомплита, которая работает лучше, чем GH Copilot (сравнивал в июле 2023). В качестве чата классика - ChatGPT