SuperAPI AI 工具集

clj-debug

测试与质量

查看项目

更新于 10-15 22:15

技能介绍

用途:在调试 Clojure 或 Babashka 代码时,避免通过添加日志、println 或修改源码来排查问题,转而使用 REPL 内联检查,缩短反馈循环。

主要能力:核心模式是“先停下再打日志”。当准备添加 println、tap>、(log ...) 或修改源码调试时,改为在 nrepl 中使用内联 def 捕获值。做法是在函数内部临时加入 (def variable-name variable-name),在 nrepl 中求值修改后的函数,从而在不改动源文件的情况下捕获并检查变量。

使用方式:先阅读错误信息与堆栈,确定要检查的函数与参数;在 nrepl 中写出带内联 def 的函数定义并求值;调用函数触发捕获;在 REPL 中检查捕获值(keys、type、值);形成假设;在 nrepl 中测试修正后的代码并验证;确认无误后再更新源文件,并在提交前删除所有 (def ...) 行。资料提到可使用 /brepl 逐步求值。

适用场景:函数调用约定错误、参数格式不符等问题的定位与修复验证。

限制与注意:若代码使用 Integrant 组件,修改组件代码并在 nrepl 中求值后,运行中的组件可能不会立即生效,仍表现为旧行为;此时需重置组件,例如 (require '[your.component :as comp] :reload),再执行 (ig/halt! @system :component-key) 与 (alter-var-root #'@system (fn [s] (ig/init (:system/config @system) :component-key)))。提交前务必移除内联 def。其他安装或平台信息暂未提供。