clangd / vscode-clangd

Visual Studio Code extension for clangd
https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd
MIT License
592 stars 97 forks source link

Some system include paths are missing, and result in a header not found error #639

Open coyorkdow opened 2 weeks ago

coyorkdow commented 2 weeks ago

Please describe the problem

I found tones of errors produced by clangd today, in a project that has been developed for months. Clangd worked well with this project but suddenly everything turned wrong. So I delve into this issue and found the root problem is an error when resolving a dependency's header. image It hinted In included file: 'sanitizer/asan_interface.h' file not foundclang(pp_file_not_found). This is a header from asan. I enabled asan for debugging, and my project can be compiled on this host with asan opened. I also confirmed that sanitizer/asan_interface.h exists on the host, it is located at /usr/lib/gcc/x86_64-linux-gnu/6/include.

youtao.guo@xxx-xxx-xxx:~$ ls /usr/lib/gcc/x86_64-linux-gnu/6/include/sanitizer/
asan_interface.h         common_interface_defs.h  lsan_interface.h
youtao.guo@xxx-xxx-xxx:~/databroker$ ls /usr/lib/gcc/x86_64-linux-gnu/6/include/sanitizer/asan_interface.h
/usr/lib/gcc/x86_64-linux-gnu/6/include/sanitizer/asan_interface.h

My compiler is /usr/bin/g++, which is exactly the executable that be specified in compile_commands.json. And I also specified the --query-driver=/usr/bin/g++. According to the examining of gcc, I am pretty sure that such directory can be lookup by my compiler.

youtao.guo@xxx-xxx-xxx:~$ g++ -E -x c++ - -v < /dev/null
Using built-in specs.
COLLECT_GCC=g++
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18+deb9u1' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
COLLECT_GCC_OPTIONS='-E' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/6/cc1plus -E -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE - -mtune=generic -march=x86-64
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/6"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/6
 /usr/include/x86_64-linux-gnu/c++/6
 /usr/include/c++/6/backward
 /usr/lib/gcc/x86_64-linux-gnu/6/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'

However, when I checked the clangd's log, /usr/lib/gcc/x86_64-linux-gnu/6/include is missing.

I[16:52:40.824] System includes extractor: successfully executed /usr/bin/g++
    got includes: "/usr/include/c++/6, /usr/include/x86_64-linux-gnu/c++/6, /usr/include/c++/6/backward, /usr/local/include, /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed, /usr/include/x86_64-linux-gnu, /usr/include"
    got target: "x86_64-linux-gnu"

It can be solved by adding an additional .clangd file in the project source path. Like

CompileFlags:
  Add:
    - "-I/usr/lib/gcc/x86_64-linux-gnu/6/include"

But apparently I want to know why clangd cannot find this system path.

Logs

I[17:28:47.992] clangd version 18.1.3 (https://github.com/llvm/llvm-project c13b7485b87909fcf739f62cfa382b55407433c0)
I[17:28:47.992] Features: linux+grpc
I[17:28:47.992] PID: 2988153
I[17:28:47.992] Working directory: /data00/home/youtao.guo/databroker
I[17:28:47.992] argv[0]: /home/youtao.guo/.vscode-server/data/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/18.1.3/clangd_18.1.3/bin/clangd
I[17:28:47.992] argv[1]: --enable-config
I[17:28:47.992] argv[2]: --query-driver=/usr/bin/g++
I[17:28:47.992] argv[3]: --background-index
I[17:28:47.992] argv[4]: --compile-commands-dir=/data00/home/youtao.guo/databroker/bsproxy/build
I[17:28:47.992] Starting LSP over stdin/stdout
I[17:28:48.011] <-- initialize(0)
I[17:28:48.012] --> reply:initialize(0) 1 ms
I[17:28:48.107] <-- initialized
I[17:28:48.125] <-- textDocument/didOpen
E[17:28:48.126] System include extraction: driver clang not found in PATH
E[17:28:48.126] config error at /data00/home/youtao.guo/databroker/.clangd:3:51: Config should be a dictionary
I[17:28:48.126] --> textDocument/publishDiagnostics
I[17:28:48.143] Loaded compilation database from /data00/home/youtao.guo/databroker/bsproxy/build/compile_commands.json
I[17:28:48.149] --> window/workDoneProgress/create(0)
I[17:28:48.150] Enqueueing 1614 commands for indexing
I[17:28:48.155] System includes extractor: successfully executed /usr/bin/g++
    got includes: "/usr/include/c++/6, /usr/include/x86_64-linux-gnu/c++/6, /usr/include/c++/6/backward, /usr/local/include, /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed, /usr/include/x86_64-linux-gnu, /usr/include"
    got target: "x86_64-linux-gnu"
I[17:28:48.155] ASTWorker building file /data00/home/youtao.guo/databroker/bsproxy/blob_manager.h version 1 with command inferred from /data00/home/youtao.guo/databroker/bsproxy/blob_manager.cc
[/data00/home/youtao.guo/databroker/bsproxy/build]
/usr/bin/g++ --driver-mode=g++ -DBYTESTORE_SDK_VERSION=142 -DDATABROKER_GIT_SHA=NotGitVersion -DDATABROKER_UNITTEST -DGFLAGS_IS_A_DLL=0 -DSPDLOG_COMPILED_LIB -I/data00/home/youtao.guo/databroker/bsproxy/build/proto -I/data00/home/youtao.guo/databroker/bsproxy -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4 -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/byte -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/abseil-cpp -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/protobuf/src -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/brpc/src -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/jerasure/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/json/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/spdlog/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/yaml-cpp/include -I/data00/home/youtao.guo/databroker/bsproxy/build/bytestore_sdk_v1.4/bytestore/byte/thirdparty/gflags/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/msgpack/include -I/data00/home/youtao.guo/databroker/bsproxy/build/bytestore_sdk_v1.4/bytestore/byte/thirdparty/msgpack/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/zookeeper/include -I/data00/home/youtao.guo/databroker/bsproxy/build/bytestore_sdk_v1.4/bytestore/byte/thirdparty/zookeeper/include -I/data00/home/youtao.guo/databroker/bsproxy/bytestore_sdk_v1.4/bytestore/byte/thirdparty/zookeeper/generated -I/data00/home/youtao.guo/databroker/bsproxy/build/proto/proto -DNDEBUG -Wall -lpthread -lm -ggdb3 -g3 -O2 -lunwind -fno-omit-frame-pointer -g -fprofile-arcs -ftest-coverage -O3 -DNDEBUG -fsanitize=address -Werror -Wno-error=pmf-conversions -pthread -c -x c++-header -std=gnu++14 -isystem /usr/include/c++/6 -isystem /usr/include/x86_64-linux-gnu/c++/6 -isystem /usr/include/c++/6/backward -isystem /usr/local/include -isystem /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed -isystem /usr/include/x86_64-linux-gnu -isystem /usr/include --target=x86_64-linux-gnu -resource-dir=/data00/home/youtao.guo/.vscode-server/data/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/18.1.3/clangd_18.1.3/lib/clang/18 -- /data00/home/youtao.guo/databroker/bsproxy/blob_manager.h
I[17:28:48.157] --> textDocument/clangd.fileStatus
I[17:28:48.202] <-- reply(0)
I[17:28:48.202] --> $/progress
I[17:28:48.202] --> $/progress
I[17:28:48.257] <-- textDocument/documentSymbol(1)
I[17:28:48.257] <-- textDocument/codeAction(2)
I[17:28:48.264] <-- textDocument/documentLink(3)
I[17:28:48.265] <-- textDocument/inlayHint(4)
I[17:28:48.474] <-- textDocument/foldingRange(5)
I[17:28:48.486] --> reply:textDocument/foldingRange(5) 12 ms
I[17:28:48.550] <-- textDocument/documentSymbol(6)
I[17:28:48.738] <-- textDocument/semanticTokens/full(7)
I[17:28:50.223] Built preamble of size 15193904 for file /data00/home/youtao.guo/databroker/bsproxy/blob_manager.h version 1 in 2.07 seconds
I[17:28:50.225] Indexing c++14 standard library in the context of /data00/home/youtao.guo/databroker/bsproxy/blob_manager.h
I[17:28:50.225] --> textDocument/clangd.fileStatus
I[17:28:50.225] --> textDocument/clangd.fileStatus
I[17:28:50.225] --> workspace/semanticTokens/refresh(1)
I[17:28:50.360] --> textDocument/publishDiagnostics
I[17:28:50.361] --> textDocument/inactiveRegions
I[17:28:50.370] --> reply:textDocument/documentSymbol(1) 2113 ms
I[17:28:50.373] --> reply:textDocument/codeAction(2) 2116 ms
I[17:28:50.374] --> reply:textDocument/documentLink(3) 2109 ms
I[17:28:50.375] --> reply:textDocument/inlayHint(4) 2110 ms
I[17:28:50.380] --> reply:textDocument/documentSymbol(6) 1829 ms
I[17:28:50.384] --> reply:textDocument/semanticTokens/full(7) 1646 ms
I[17:28:50.384] --> textDocument/clangd.fileStatus
I[17:28:50.402] <-- reply(1)
I[17:28:50.634] --> $/progress
I[17:28:50.635] --> $/progress
I[17:28:51.092] <-- textDocument/codeAction(8)
I[17:28:51.092] --> reply:textDocument/codeAction(8) 0 ms
I[17:28:51.092] --> textDocument/clangd.fileStatus
I[17:28:51.192] <-- textDocument/codeAction(9)
I[17:28:51.192] --> reply:textDocument/codeAction(9) 0 ms
I[17:28:51.192] --> textDocument/clangd.fileStatus
I[17:28:52.093] Indexed c++14 standard library (incomplete due to errors): 11807 symbols, 996 filtered
I[17:28:52.353] <-- textDocument/inlayHint(10)
I[17:28:52.354] --> reply:textDocument/inlayHint(10) 0 ms
I[17:28:52.354] --> textDocument/clangd.fileStatus
I[17:28:52.593] <-- textDocument/codeAction(11)
I[17:28:52.593] --> reply:textDocument/codeAction(11) 0 ms
I[17:28:52.593] --> textDocument/clangd.fileStatus
I[17:28:52.791] <-- textDocument/semanticTokens/full/delta(12)
I[17:28:52.793] --> reply:textDocument/semanticTokens/full/delta(12) 2 ms
I[17:28:52.793] --> textDocument/clangd.fileStatus
I[17:28:52.871] <-- textDocument/codeAction(13)
I[17:28:52.871] --> reply:textDocument/codeAction(13) 0 ms
I[17:28:52.871] --> textDocument/clangd.fileStatus
I[17:28:58.462] <-- textDocument/documentHighlight(14)
I[17:28:58.462] --> reply:textDocument/documentHighlight(14) 0 ms
I[17:28:58.462] --> textDocument/clangd.fileStatus
I[17:28:58.466] <-- $/cancelRequest

System information

clangd version (from the log, or clangd --version):

clangd version 18.1.3 (https://github.com/llvm/llvm-project c13b7485b87909fcf739f62cfa382b55407433c0) Features: linux+grpc Platform: x86_64-unknown-linux-gnu

clangd extension version

v0.1.28

Operating system

PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"

HighCommander4 commented 2 weeks ago

However, when I checked the clangd's log, /usr/lib/gcc/x86_64-linux-gnu/6/include is missing.

I[16:52:40.824] System includes extractor: successfully executed /usr/bin/g++
  got includes: "/usr/include/c++/6, /usr/include/x86_64-linux-gnu/c++/6, /usr/include/c++/6/backward, /usr/local/include, /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed, /usr/include/x86_64-linux-gnu, /usr/include"
  got target: "x86_64-linux-gnu"

It can be solved by adding an additional .clangd file in the project source path. Like

CompileFlags:
  Add:
    - "-I/usr/lib/gcc/x86_64-linux-gnu/6/include"

But apparently I want to know why clangd cannot find this system path.

I believe this is caused by the change made in https://github.com/clangd/clangd/issues/1695. You can have a look at the issue and/or this code for the motivation.

Your workaround of adding back the external compiler's built-in include path in a case like this is probably the best approach.

yueduz commented 2 weeks ago

For some reason, the "--compile-commands-dir" parameter now makes the "--query-driver" parameter invalid. You can't use these two parameters at the same time

HighCommander4 commented 2 weeks ago

For some reason, the "--compile-commands-dir" parameter now makes the "--query-driver" parameter invalid. You can't use these two parameters at the same time

Using those two parameters together should work fine. If it's not working as expected, please share logs in a new issue.