PDA

Просмотр полной версии : VSCode как C++ IDE


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 ) - вывод уведомлений о завершении тасков

Поведение VSCode​Auto 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 в случае ошибок

GIT​Git Graph (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1odXRjaGllLmdpdC1ncmFwaA) - отображение коммитов в виде графа. Оттуда же их можно черипикать и мерджить ветки

GitLess (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPW1hYXR0ZGQuZ2l0bGVzcw) - не жадная версия GitLens (и inlay hints коммиты тут по ощущению быстрее показывает)

AI​Codeium (https://www.blast.hk/redirect/aHR0cHM6Ly9jb2RlaXVtLmNvbT9yZWZlcnJhbF9pZD1jM0pmZE dWaGJVQnpjaTUwWldGdA) - просто классный AI-ассистент. Из того, что понравилось - у них своя нейронка для автокомплита, которая работает лучше, чем GH Copilot (сравнивал в июле 2023). В качестве чата классика - ChatGPT

vmprotect
02.02.2024, 12:19
Благодарю

но цлион остается в наших сердцах

kin4stat
02.02.2024, 13:32
и все эти анализы полнейшная хуета, потому что под капотом ебучий clangd, который нихуя не умеет, и ломается от любой незакрытой скобки или точки запятой.

Покажите уже людям решарпер в Visual Studio(в CLion Nova он пока не полностью интегрирован)

SR_team
02.02.2024, 13:55
и все эти анализы полнейшная хуета, потому что под капотом ебучий clangd, который нихуя не умеет, и ломается от любой незакрытой скобки или точки запятой.

Покажите уже людям решарпер в Visual Studio(в CLion Nova он пока не полностью интегрирован)


Фишка как раз в том, что под капотом НЕ clangd. Недостаток clangd я написал - в нем отключены все медленные анализаторы

SR_team
18.03.2024, 23:23
А, собсна, как эту хуету отключить?

Я перерыл весь интернетус и не нашел, как отключить эту поебень.
Типа она не нужна, т.к. есть более адекватная реализация от самого вскода
Плюс при разделении дефайна и имплементации какого то большого и простого класса, у тебя просто засирается ide этими надписями


В аргументы clangd: --code-lens=false

SR_team
07.04.2024, 21:46
Докинул свое расширение, которое автоматически открывает вывод CMake в случае ошибки сборки

Для использования надо перебиндить сборку на команды из этого расширения, а оно уже само дернит оригинальный CMake. По дефолту расширение добавляет бинды:


Ctrl+B - сборка

F8 - установка
Дополнительно можно забиндить: очистку, конфигурацию, реконфигурацию и открытие вывода CMake (Нижняя панель открывается сразу на CMake/Build, даже если до этого был выбран другой вывод/вкладка)

cmake-build - Visual Studio Marketplace (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0uY21ha2UtdG9vbHMtYnVp bGQtd3JhcHBlcg)

Extension for Visual Studio Code - Wrapper for cmake-tools to open output on build fails

marketplace.visualstudio.com

sobe1t
14.04.2024, 04:08
Дополню насчет генерации compile_commands.json в случае если система сборки из коробки этого не может. Существует прикольная утилита Bear (https://github.com/rizsotto/Bear) которая позволяет получить базу данных компиляции. Отлично работает в случае легаси проектов с самописными Makefiles. Из больших минусов - на данный момент поддерживается только Linux (можно использовать WSL).

SR_team
14.04.2024, 17:44
Обновил патченый clangd:


Сервер до ветки 19.x

Расширение ребейзнуто на версию 0.1.28 (старая версия была на базе 0.1.25) и добавлена автонастройка resource dir при использовании компилятора clang

sobe1t
15.04.2024, 17:00
Есть ли какой то способ заставить clangd искать ссылки в заголовочных файлах так же как это делает расширение от майкрософта?

SR_team
16.04.2024, 00:25
Есть ли какой то способ заставить clangd искать ссылки в заголовочных файлах так же как это делает расширение от майкрософта?


опиши подробнее проблему

sobe1t
16.04.2024, 03:33
Есть допустим функция по классике объявленная в .hpp и описанная в .cpp, в VS code я запрашиваю все ссылки на эту функцию (ПКМ →Find all references) и clangd почему-то ищет их только в .cpp упорно игноря .hpp такая же фигня и с глобальным ренеймингом. Это какое-то ограничение clangd или ему нужны доп. флаги ? Что-то похожее описывается тут (https://github.com/clangd/clangd/issues/695) и тут (https://github.com/clangd/clangd/issues/123).

SR_team
16.04.2024, 03:57
Есть допустим функция по классике объявленная в .hpp и описанная в .cpp, в VS code я запрашиваю все ссылки на эту функцию (ПКМ →Find all references) и clangd почему-то ищет их только в .cpp упорно игноря .hpp такая же фигня и с глобальным ренеймингом. Это какое-то ограничение clangd или ему нужны доп. флаги ? Что-то похожее описывается тут (https://github.com/clangd/clangd/issues/695) и тут (https://github.com/clangd/clangd/issues/123).


Понял. Проблема не возникает, когда clangd сам может определить связь между заголовком и сурсом - обычно он с трудом определяет такие связи, если файлы лежат в разных папках, например include/main.hpp и src/main.cpp. Решается включением хидера в compile_commands.json. Где-то в одной из иссушек была тула, которая парсит compile_commands.json и сурсы из него, что бы вытащить все хзидеры и создать из них новый compile_commands.json.

Так же можешь попробовать повторить проблему на патченном клиенте clangd. Я точно не помню, но когда я добавлял поддержку cmake в расширение clangd, CMake вроде как включал хидеры в модель кодаю Но для этого хидеры должны быть указаны в проекте:

Код:






add_library(foo main.cpp main.h) # Хидер указан для компиляции
add_library(bar main.cpp) # Хидер не указан для компиляции




У либы foo - должны норм работать ссылки с патченным clangd клиентом. При этом compile_commands.json для либ foo и bar будут одинаковым - CMake исключает хидеры при его генерации.

Receiver
22.06.2024, 17:01
Срчик, спасибо тебе за помощь с кросскомпляцией и топовейший пропатченный clangd. Проблем действительно нет, когда Microsoft идёт на***. Надо бы сделать "Normal C/C++ Enjoyer Extensions Pack"

SR_team
05.07.2024, 03:54
Сегодня смерджили API clangd, который дает full-доступ к LSP-серверу - будет обновление без модифицированного клиента - перекину все с него на отдельные плагины

Export client from activation as API for use in other extensions by thegecko · Pull Request #575 · clangd/vscode-clangd (https://github.com/clangd/vscode-clangd/pull/575)

This PR exports the language client so other VS Code extensions can take advantage of the clangd LSP features. For example, domain specific functionality (e.g. intrinsics) could be implemented in a...

github.com


UPDATE: Расширения готовы: 1 (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udnNjb2RlLWNsYW5nZC1j bWFrZQ), 2 (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udnNjb2RlLWNsYW5nZC1k b2NyZWY), 3 (https://www.blast.hk/redirect/aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2 l0ZW1zP2l0ZW1OYW1lPVNSLXRlYW0udnNjb2RlLWNsYW5nZC1j b2RlbGVucw). Но в PR обнаружился баг, ждем исправения в основной ветке

Restarting clangd break the exported API · Issue #648 · clangd/vscode-clangd (https://github.com/clangd/vscode-clangd/issues/648)

Write an extension what used the clangd API added in #575 (for example https://github.com/HighCommander4/vscode-clangd-api-example) Trigger extension activation (in provided example hover informati...

github.com


UPDATE: fix, ждем релиза новой версии на маркетплейсах

Musaigen
11.02.2025, 19:20
1. Поддержка doxygen-документации


в виде отдельного расширения можно не ждать?

SR_team
11.02.2025, 23:56
в виде отдельного расширения можно не ждать?


Можно сделать, но надо будет дефолтный ховер отключать

https://forum.antichat.xyz/attachments/28585352/

UPD Хотя по идее можно попробовать похукать middleware клиента через API, что бы сделать без отключения

nikkymen
08.05.2025, 00:34
Спасибо, очень полезная информация!

Есть ли какое-то решение для запуска таргетов?

У меня большой cmake проект и много таргетов.

Хочется уметь запускать их с различными аргументами.

Расширение cmake не дает возможность запускать их с аргументами, а в launch.json запускается только через gdb/lldb.

Неудобно капец

SR_team
08.05.2025, 12:43
Спасибо, очень полезная информация!
Есть ли какое-то решение для запуска таргетов?
У меня большой cmake проект и много таргетов.
Хочется уметь запускать их с различными аргументами.
Расширение cmake не дает возможность запускать их с аргументами, а в launch.json запускается только через gdb/lldb.
Неудобно капец


В VSCode есть встроеная команда для запуска таргетов из launch.json без отладчика (workbench.action.debug.run). Ты так же прописываешь конифиг с отладчиком, а потом просто используешь ее вместо начала отладки

nikkymen
08.05.2025, 14:12
В VSCode есть встроеная команда для запуска таргетов из launch.json без отладчика (workbench.action.debug.run). Ты так же прописываешь конифиг с отладчиком, а потом просто используешь ее вместо начала отладки


Если посмотреть на вывод консоли, то видно, что запускается все равно через gdb, просто без брейкпоинтов. Т.е отладочные символы все равно грузятся

SR_team
08.05.2025, 20:22
Если посмотреть на вывод консоли, то видно, что запускается все равно через gdb, просто без брейкпоинтов. Т.е отладочные символы все равно грузятся


Можешь cmake аналогичную команду использовать, но она только для cmake проектов и нельзя задать аргументы, рабочую папку и переменные среды

UPD: Из того что начитал по workbench.action.debug.run - оно использует отладчик как лаунчер, но не аттачится к процессу. Сделано, что бы соблюсти все правила описаные в launch.json, т.к. там могут быть поля специфичные для отладчика. Думаю для запуска на локальной машине можно поискать расширения с дебагером-заглушкой, который будет юзать launch.json просто как конфиг для запуска. Но для кейсов с деплоем, например apk, такое вряд ли есть. Так что встроенное решение в VSCode наверно самое нормальное в этом плане

вайега52
03.02.2026, 21:40
Дополню насчет генерации compile_commands.json в случае если система сборки из коробки этого не может. Существует прикольная утилита Bear (https://github.com/rizsotto/Bear) которая позволяет получить базу данных компиляции. Отлично работает в случае легаси проектов с самописными Makefiles. Из больших минусов - на данный момент поддерживается только Linux (можно использовать WSL).


На Windows решил это тем, что в качестве генератора начал использовать Ninja, вместо генератора визуалки. Теперь clangd и clang-tidy спокойно работают с проектами, где нужен MSVC (а в реалиях гта это особенно актуально)

.clangd:






CompileFlags
:
CompilationDatabase
:
build
-
release
Compiler
:
cl.exe
Add
:
[
"-std:c++latest"
,
"/std:c++latest"
]




CMakePresets.json:






{
"version"
:
8
,
"configurePresets"
:
[
{
"name"
:
"base-ninja"
,
"hidden"
:
true
,
"generator"
:
"Ninja"
,
"architecture"
:
{
"value"
:
"x86"
,
"strategy"
:
"external"
}
,
"toolset"
:
{
"value"
:
"host=x86"
,
"strategy"
:
"external"
}
,
"cacheVariables"
:
{
"CMAKE_EXPORT_COMPILE_COMMANDS"
:
"ON"
,
"CMAKE_C_COMPILER"
:
"cl.exe"
,
"CMAKE_CXX_COMPILER"
:
"cl.exe"
}
}
,
{
"name"
:
"x86-debug"
,
"displayName"
:
"GTA SA (MSVC x86 Debug)"
,
"inherits"
:
"base-ninja"
,
"binaryDir"
:
"${sourceDir}/build-debug"
,
"cacheVariables"
:
{
"CMAKE_BUILD_TYPE"
:
"Debug"
}
}
,
{
"name"
:
"x86-release"
,
"displayName"
:
"GTA SA (MSVC x86 Release)"
,
"inherits"
:
"base-ninja"
,
"binaryDir"
:
"${sourceDir}/build-release"
,
"cacheVariables"
:
{
"CMAKE_BUILD_TYPE"
:
"Release"
}
}
]
,
"buildPresets"
:
[
{
"name"
:
"debug"
,
"configurePreset"
:
"x86-debug"
}
,
{
"name"
:
"release"
,
"configurePreset"
:
"x86-release"
}
]
}