VS Code使用SML遇SysErr异常及文件识别问题求助
解决SML/NJ在WSL环境下的SysErr文件属性异常问题
以下是针对你遇到的uncaught exception SysErr [SysErr: access: cannot get file attributes]异常的排查和解决步骤:
优先调整文件存储路径与WSL访问方式
别把SML代码放在Windows原生路径(比如C:\Users\...)直接用VS Code打开,WSL对Windows挂载目录的权限处理容易出问题。正确操作:- 在WSL终端创建项目目录:
mkdir ~/sml-hw1 - 把
hw1.sml和hw1test.sml复制到这个目录 - 在WSL终端执行
code .,让VS Code以WSL远程窗口打开该目录
- 在WSL终端创建项目目录:
确认Millet扩展的SML路径配置
打开VS Code设置,搜索Millet: Smlnj Path,确保路径指向WSL中SML/NJ的实际安装位置(而非Windows下的路径)。你可以在WSL终端用which sml查到路径,比如/usr/bin/sml,把这个路径填进去。
同时保证millet.toml配置正确,示例:[project] name = "hw1" sources = ["."]先在WSL终端验证SML/NJ可用性
脱离VS Code,直接在WSL终端操作:- 进入项目目录:
cd ~/sml-hw1 - 启动SML REPL:
sml - 手动加载文件:
use "hw1.sml";和use "hw1test.sml";
如果终端能正常运行,说明问题出在VS Code扩展配置;如果终端也报错,就要检查WSL里的SML/NJ安装或文件权限。
- 进入项目目录:
修复项目文件权限
在WSL终端执行以下命令,确保文件和目录权限正确:chmod -R 755 ~/sml-hw1 chown -R $(whoami):$(whoami) ~/sml-hw1确认VS Code的WSL远程模式
查看VS Code左下角状态栏,应该显示你的WSL发行版(比如WSL: Ubuntu)。如果显示本地Windows环境,说明你没通过WSL远程窗口打开目录,此时Millet可能调用Windows版SML/NJ,导致路径解析错误触发Win32相关异常。
内容的提问来源于stack exchange,提问作者tomer dror
相关产品推荐
相关产品推荐

