如何在ClojureScript中不中断执行地打印当前堆栈跟踪?
在ClojureScript中打印堆栈跟踪(不中断程序)
嘿,这个需求我太熟了!既然你已经配置好source maps,完全可以在不打断程序运行的前提下,轻松打印出对应到ClojureScript源码的堆栈跟踪,下面给你两个实用的方法:
方法1:最简方案——直接调用console.trace()
ClojureScript可以无缝调用JavaScript的API,所以在你想要查看调用来源的函数里,直接加一行代码就行:
(js/console.trace)
执行后,浏览器控制台会输出完整的调用堆栈,而且因为source maps已经配置妥当,DevTools会自动把编译后的JavaScript栈帧映射回你的ClojureScript源文件和具体行号,直接点击就能跳转到源码位置,非常直观。
方法2:手动捕获堆栈(自定义输出)
如果你需要对堆栈信息做一些处理再打印(比如过滤某些无关栈帧),可以通过Error对象来获取堆栈字符串:
(let [stack-trace (.-stack (js/Error.))] (js/console.log "当前调用堆栈:\n" stack-trace))
这个stack-trace变量里包含了完整的调用栈信息,同样会被source maps解析成对应的ClojureScript代码位置,你可以根据需求调整输出格式。
额外小提醒
- 调试完成后记得把这些代码移除或者用编译条件包裹(比如只在开发环境生效),避免在生产环境产生不必要的性能消耗。
- 如果使用Chrome或Firefox的DevTools,还可以通过控制台的栈帧链接直接跳转到对应的ClojureScript源码行,调试效率会更高!
内容的提问来源于stack exchange,提问作者Neal Ehardt
相关产品推荐
相关产品推荐

