Отладка ошибок сервера языка C++: недопустимый AST
У меня есть проект C++, в котором я могу открыть любой.cpp или.h, и LSP выйдет из строя / выйдет из строя (я использую emacs с
lsp-mode
).
Например, если я попытаюсь открыть файл с именем
IDictionary.h
, Clangd потерпит неудачу со следующими ошибками в clangd:: STDERR буфер
I[17:33:37.200] BeginSourceFile() failed when building AST for /home/anlsh/work/horizon-runtime/src/prod/data/IDictionary.h
I[17:33:37.246] <-- textDocument/documentHighlight(103)
I[17:33:37.246] --> reply:textDocument/documentHighlight(103) 0 ms, error: invalid AST
ccls также не работает (завершается с сигналом), хотя его сообщения об ошибках тоже не помогают
17:36:44 indexer6 indexer.cc:1302 E failed to index /home/anlsh/work/horizon-runtime/src/prod/data/IDictionary.h
/snap/ccls/48/bin/../usr/lib/x86_64-linux-gnu/libLLVM-7.so.1(_ZN4llvm3sys15PrintStackTraceERNS_11raw_ostreamE+0x2a)[0x7f2301010e8a]
/snap/ccls/48/bin/../usr/lib/x86_64-linux-gnu/libLLVM-7.so.1(_ZN4llvm3sys17RunSignalHandlersEv+0x34)[0x7f230100f544]
/snap/ccls/48/bin/../usr/lib/x86_64-linux-gnu/libLLVM-7.so.1(+0x907682)[0x7f230100f682]
/snap/core18/current/lib/x86_64-linux-gnu/libpthread.so.0(+0x128a0)[0x7f22fff5a8a0]
/snap/ccls/48/bin/ccls(+0x24ae87)[0x5564df56ee87]
/snap/core18/current/lib/x86_64-linux-gnu/libpthread.so.0(+0x76db)[0x7f22fff4f6db]
/snap/core18/current/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f)[0x7f22ffc78a3f]
В любом случае, это происходит с каждым файлом в проекте, даже с такими простыми, как
#include "stdafx.h"
using namespace Api;
Я предполагал, что какой-то файл, загружаемый build/compile_commands.json, все портит, но я не уверен. VSCode (который, как я предполагаю, использует LSP, хотя я знаю, что у него есть свои уловки) вообще не имеет проблем с моим проектом.
В любом случае, я надеялся, что кто-то может указать мне на более подробный
clangd
или же
ccls
журналы и, возможно, некоторые команды, которые могут дать мне более информативные сообщения об ошибках или проверить файлы в моем проекте
1 ответ
Проблема, по-видимому, исправлена в последних версиях clangd (11.0) и ccls (0.20190823.6-26-g141aea8a).
Сэм МакКолл о разногласиях с LLVM тоже сказал следующее.
Вы можете получить немного больше информации, добавив -log=verbose к аргументам clangd и предоставив больше журнала (вещи, которые могут иметь значение, включают версию, путь, сборку преамбулы, ...). Я не очень разбираюсь в Windows stdafx, но понимаю, что он включает много вещей, некоторые из которых, возможно, содержат ошибку в этой версии.