vscode-cmake-tools
vscode-cmake-tools copied to clipboard
[Bug] All file watcher being exhausted (250k+) on Kubuntu 25.04
Brief Issue Summary
When the extension is enabled, it seems to try to watch every file in my home directory even though my workspace / project directory is about 5 directories deeper. When I disable this extension the problem disappears. I use https://github.com/mikesart/inotify-info to show me which app is watching which files.
CMake Tools Diagnostics
{
"os": "linux",
"vscodeVersion": "1.99.3",
"cmtVersion": "1.20.53",
"configurations": [
{
"folder": "/home/dom/EE/frontendmcu/frontend-mcu/firmware",
"cmakeVersion": "3.31.6",
"configured": false,
"generator": "Ninja",
"usesPresets": true,
"compilers": {}
}
],
"cpptoolsIntegration": {
"isReady": false,
"hasCodeModel": false,
"activeBuildType": "",
"buildTypesSeen": [],
"requests": [],
"responses": [],
"partialMatches": [],
"targetCount": 0,
"executablesCount": 0,
"librariesCount": 0,
"targets": []
},
"settings": [
{
"communicationMode": "automatic",
"useCMakePresets": "auto",
"configureOnOpen": true
}
]
}
Debug Log
[main] Building folder: /home/dom/EE/frontendmcu/frontend-mcu/firmware/build/Debug
[main] The folder containing the CMake cache is missing. The cache will be regenerated.
[main] Configuring project: firmware
[proc] Executing command: /usr/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=/home/dom/EE/frontendmcu/frontend-mcu/firmware/cmake/gcc-arm-none-eabi.cmake -S/home/dom/EE/frontendmcu/frontend-mcu/firmware -B/home/dom/EE/frontendmcu/frontend-mcu/firmware/build/Debug -G Ninja
[cmake] CMake Warning (dev) at CMakeLists.txt:32 (enable_language):
[cmake] project() should be called prior to this enable_language() call.
[cmake] This warning is for project developers. Use -Wno-dev to suppress it.
[cmake]
[cmake] -- The C compiler identification is GNU 14.2.1
[cmake] -- The ASM compiler identification is GNU
[cmake] -- Found assembler: /usr/bin/arm-none-eabi-gcc
[cmake] -- The CXX compiler identification is GNU 14.2.1
[cmake] Build type: Debug
[cmake] -- Lib version header file generator: /home/dom/EE/frontendmcu/frontend-mcu/firmware/EE/lib/generate_version_header.sh
[cmake] -- Configuring done (0.2s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: /home/dom/EE/frontendmcu/frontend-mcu/firmware/build/Debug
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/dom/EE/frontendmcu/frontend-mcu/firmware/build/Debug --
----- skipping all the files here for privacy and security reasons, they compile fine ----
[build] [71/72] Building CXX object CMakeFiles/frontend_mcu_firmware.dir/EE/src/threads/Controller.cpp.obj
[build] [72/72] Linking CXX executable frontend_mcu_firmware.elf
[driver] Build completed: 00:00:03.717
[build] Build finished with exit code 0
Additional Information
No response
Hi @dom11990 Thanks for reporting issue here!
I have installed inotify-info to /usr/local/bin by run make install, after that I run the command in terminal
sudo inotify-info | grep code
- When enable the CMake Tools extension, use cmake: configure and cmake: build to trigger CMake Tools, I get the follow result:
- When disable the CMake Tools extension, the result is as below:
The difference between these two condition is one PID is missing after disable CMake Tools extension, I also print the PID info in follow video, please confirm whether this is your issue? and please correct me if I have done something wrong.
I have the same /a similiar problem.
Environment
Host OS: Windows 11 VS Code Version: 1.105.1 Remote OS: Linux Debian 11 (Hyper-V VM on the same machine) Connection via SSH CMake Tools Version: 1.21.36 (installed on remote)
Steps to Reproduce
- Start VS Code on Windows.
- Connect to the Linux VM via Remote-SSH.
- Open a C++/CMake project located in the home directory (project that uses CMakePresets).
Expected Behavior
- CMake Tools extension activates
- CMake Tool view appears
- Configure presets are offered for selection
Actual Behavior
- CMake Tools extension stays inactive (Runtime Status => Not yet activated)
- No CMake Tools view
- The number of $HOME/.vscode-server/cli/servers/Stable-7d842fb85a0275a4a8e4d7e040d2625abbf7f084/server/node watches increases until the limit (currently 1048576) is reached
- After a while notification appears: "Remote Extension host terminated unexpectedly 3 times within the last 5 minutes."
Notes
- CMake Tools extension seams to scan recursivelly the entire $HOME folder (why????, there are ~2000000 files)
- "Watcher Exclude" and "Watcher Include" settings don't have any effect
- cmake.scanForKits=false doesn't solve the problem
- If the CMake Tools extension is disabled the number of wtaches doesn't increase
Additional info: even if I exclude folders with cmake.exclude, the extension tries to access files inside these folders and tries also therefore to set watchers. Output from the debug console:
mainThreadExtensionService.ts:79 Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/remotes.json'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
console.ts:137 [Extension Host] rejected promise not handled within 1 second: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml'
console.ts:137 [Extension Host] stack trace: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
mainThreadExtensionService.ts:78 [ms-vscode.cmake-tools]ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml'
mainThreadExtensionService.ts:79 Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
console.ts:137 [Extension Host] rejected promise not handled within 1 second: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml.new'
console.ts:137 [Extension Host] stack trace: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml.new'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
mainThreadExtensionService.ts:78 [ms-vscode.cmake-tools]ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml.new'
mainThreadExtensionService.ts:79 Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/settings.yml.new'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
console.ts:137 [Extension Host] rejected promise not handled within 1 second: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/version.txt'
console.ts:137 [Extension Host] stack trace: Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/version.txt'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
mainThreadExtensionService.ts:78 [ms-vscode.cmake-tools]ENOSPC: System limit for number of file watchers reached, watch '.conan/version.txt'
mainThreadExtensionService.ts:79 Error: ENOSPC: System limit for number of file watchers reached, watch '.conan/version.txt'
at FSWatcher.<computed> (node:internal/fs/watchers:254:19)
at Object.watch (node:fs:2549:36)
at createFsWatchInstance (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37432:15)
at setFsWatchListener (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37479:15)
at NodeFsHandler._watchWithNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37644:14)
at NodeFsHandler._handleFile (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37708:23)
at NodeFsHandler._addToNodeFs (/home/vistlr/.vscode-server/extensions/ms-vscode.cmake-tools-1.21.36/dist/main.js:37950:21)
Note: the /home/vistlr/.conan is excluded via cmake.exclude.
@vistlr Thank you for reporting this issue. We tried to reproduce this issue on our side. when we connect to Ubuntu in WSL, open the project and generate the cache, it reports the error "Bad CMake executable: "C:\msys64\mingw64\bin\cmake.exe". Check to make sure it is installed or the value of the "cmake.cmakePath" setting contains the correct path". Could you help check this? If we've missed anything, please let us know. In order for us to investigate this issue further, could you record a repro video for us? Thank you.
@yanghhhhhhh That problem doesn't occur when you connect to WSL. You have to set up a HyperV VM and install and setup Linux there. On my Linux VM an entire build environment including gcc/cmake/ninja etc. exists and so I don't run into problems with "Bad CMake". I will provide a description how to reproduce the issue.
@vistlr Is it possible that you have open a folder that has LOTS of presets files within it? Or that you're opening a project that references LOTS of presets files?
For context, we only add file watchers for presets files or cmake-variants file (depending on whether you use variants/kits or presets). Unless there is a bug that we'd need to investigate further to find, I'm not currently sure why so many file watchers would be created from our extension.
HOWEVER, the other item that is a possibility, and it could be tested by creating a dummy vscode extension with the same conditions, is that we use regex in our activationConstraints, is it possible that this is what is causing this? In this case, it could mean that it's an issue with vscode core, or that we need to minimize our ActivationConstraints. Thanks
@gcampbell-msft No, in my project folder there are exactly 10 preset files, 1 in the root (CMakePresets.json), the other 9 in a sub folder and referenced (either directly or indirectly included) from that one in the root. And I'm not using any variants. Unfortunately I'm not familiar with the implementation of vscode extensions and hence I've no clue if the ActivationConstraints can cause that problem.