欢迎!有关这一功能的更多详情,请访问关于页面。
当在宏编译时抛出异常时,堆栈跟踪中不包含“原始行”,至少在我这个情况是这样。
所以当我想查看“哪里”在我的代码中开始出现问题,堆栈跟踪并没有帮助。
特别是对于Clojure初学者(Java背景),宏编译存在并且是堆栈跟踪中没有“我的起始行”的原因,这可能并不明显。
很多库都使用“宏”来进行“常规操作”。
您有一个这样的宏和生成的异常跟踪的例子吗?
实际上,编译器能做的并不多,因为源信息是由宏本身提供的,当它可能这么做的时候。许多宏依赖于绑定到宏输入的隐式位置信息,但更复杂的宏通常应该做更多,却不一定这么做。
如果您有可重复的问题案例和生成难以“跟踪”代码的宏,可以考虑向宏作者报告问题。根据上下文,可能会有所改进,以便提高调试体验。
例如:我在写的库中有些相当复杂的宏,这个辅助工具(搜索 with-loc 的使用)负责传输必要的元数据。没有它,错误跟踪回实际代码要多困难有多困难。这是关于 CLJS,但基本方法也适用于 CLJ。
with-loc