You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Emacs+Cider开发shadow-cljs项目时无cider-error缓冲区及堆栈跟踪

解决Shadow-CLJS+Cider无法调出错误缓冲区/查看堆栈跟踪的问题

以下是针对该问题的具体排查和解决步骤:

1. 确保连接到正确的CLJS REPL环境

CLJ项目的REPL和CLJS项目的REPL是分离的,默认连接可能停留在CLJ环境,导致无法捕获CLJS错误:

  • 启动shadow-cljs并完成Cider连接后,执行M-x cider-switch-to-cljs-repl切换到CLJS专属REPL缓冲区。
  • 日常开发时,确保在CLJS REPL或对应CLJS代码缓冲区中执行操作,触发的错误才会被Cider捕获。

2. 调整Shadow-CLJS的Devtools配置

修改shadow-cljs.edn中的:devtools节点,增强错误传递到nREPL的能力:

:devtools {:preloads [reagent-dev-tools.preload]
           :console-support true
           :after-load app.main/reload!
           :repl-verbose true ; 添加该配置,强制将CLJS错误详情发送到nREPL
           }
  • 若怀疑reagent-dev-tools拦截了错误输出,可以暂时注释:preloads配置,重启shadow-cljs后测试是否恢复正常。

3. 检查Emacs Cider的CLJS相关配置

在Emacs配置文件(如init.el或config.el)中添加/确认以下配置:

; 强制开启CLJS错误缓冲区显示
(setq cider-cljs-show-error-buffer t)
; 设置堆栈跟踪默认过滤CLJS相关内容
(setq cider-stacktrace-default-filters '(:cljs))

添加后重启Emacs或执行M-x eval-buffer生效。

4. 验证Source Map生成状态

确认shadow-cljs正确生成了source map:

  • 检查target/js目录下是否存在与编译后的JS文件对应的.map文件。
  • 若没有生成,重新执行shadow-cljs watch app编译项目,查看终端输出是否有source map相关报错。

5. 手动触发错误测试

在CLJS代码中编写明确的错误代码(如调用未定义函数):

(defn test-error [] (undefined-function))
  • 在CLJS REPL中调用(test-error),或刷新浏览器触发该代码执行,观察Cider是否自动弹出错误缓冲区。
  • 若shadow-cljs终端能看到错误但Cider无响应,可尝试重新加载nREPL中间件:重启shadow-cljs并重新建立Cider连接。

内容的提问来源于stack exchange,提问作者Eva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:12:42