在我的 KDE (Ubuntu 24.04) 系统上的 vscode 中,当尝试打开“另存为”对话框来保存任何文件时,该对话框无法打开,并且一个单独的进程“kdialog”开始使用 100% 的 CPU 并尝试连续分配内存直到满了并且系统完全冻结。
重现步骤(包括清除数据和重新安装vscode):
snap remove --purge code
rm -rf ~/.config/Code
rm -rf ~/.vscode
snap install code --classic
打开 vscode(即使禁用所有扩展并关闭 GPU 加速)。创建新文件。尝试保存它。
尝试保存新文件时,vscode 使用以下参数启动 kdialog 实例:
kdialog --attach=75497476 --title="Save As" --getsavefilename /home/user/textfile "All Files (*.txt)|Plain Text (*.bat *.cmd) [...]"
此命令如果单独运行正确运行,将打开对话框并在标准输出中返回正确的文件路径。
通过尝试将 strace 附加到 kdialog 进程 (
strace -f -p $(pgrep kdialog)
),它显示了对 brk
内核函数的无限调用,表明它确实在不断尝试扩展专用于该进程的内存。
进一步调查将 gdb 附加到 kdialog 进程,看起来该进程陷入了内部的无限循环
KBuildSycoca::recreate
。我不太确定“ksycoca”在做什么,但它看起来与 ~/.cache/.ksyscoca5*
中的一个文件相关,并且确实有一个 .lock
文件引用具有相同 pid 的 kdialog
。我什至尝试清除这些缓存文件,但当 kdialog 尝试重新启动时它们会被重新创建。
关于如何进一步调查以及这
ksyscoca
如何(以及是否)参与这一切,有什么想法吗?
(kdialog 版本 23.08.5,vscode 版本 1.94.2 x64)
这里也一样(kdialog 版本 23.08.5,vscode 版本 1.94.2 x64)
这里提到的解决方法对我有用:https://github.com/microsoft/vscode/issues/231310
文件 > 首选项 > 设置 > 文本编辑器 > 文件 > 简单对话框 > 启用