如何在Calva中为Clojush项目指定代码位置设置断点?
在VS Code Calva中调试Clojush项目的正确断点设置方法
问题分析
你之前尝试在代码中插入#break时位置错误,导致语法报错;同时直接用终端lein run启动程序,Calva无法附着调试会话,因此断点不生效。
正确的断点设置方式
1. 可视化断点(推荐)
打开breed.clj文件,找到perform-genetic-operator-list函数的第99行(num-parents赋值行),点击行号左侧的空白 gutter 区域,出现红色圆点即表示断点设置成功。
2. 代码内插入#break的正确写法
若需通过代码标记断点,要将#break放在合法的表达式位置:
- 若要在
num-parents赋值完成后暂停:(let [num-parents (:parents (get genetic-operators operator))] #break ; 放在let块的第一行,赋值后立即暂停 ; 后续原有代码 ) - 若要在计算
num-parents的表达式执行时暂停:(let [num-parents #break (:parents (get genetic-operators operator))] ; 后续原有代码 )
你之前将#break插入get的参数列表中,属于语法错误,因此触发报错。
正确的调试启动流程
不要用终端执行lein run clojush.problems.demos.simple-regression,需通过Calva的REPL启动程序才能触发断点:
- 打开VS Code命令面板(快捷键:Ctrl+Shift+P)
- 选择「Calva: Start a Project REPL and Connect (aka Jack-in)」
- 选择Leiningen作为项目构建工具,等待REPL初始化完成
- 在Calva的REPL窗口中执行:
(clojush.problems.demos.simple-regression/-main)
程序运行到断点位置时会自动暂停,此时可查看原子、变量的实时值。
备选:插桩调试
若断点仍有问题,可通过插桩临时查看变量值:
(let [num-parents (:parents (get genetic-operators operator))] (println "当前num-parents值:" num-parents) ; 打印到终端 (tap> num-parents) ; 发送到Calva的Tap Inspector查看 ; 后续原有代码 )
打开Calva的Tap Inspector(命令面板选「Calva: Open Tap Inspector」)即可查看tap>发送的变量内容。
内容的提问来源于stack exchange,提问作者ZGI
相关产品推荐
相关产品推荐

