2024 Clojure状态调查中分享您的想法!

欢迎!请看关于页面以了解更多此网站的详细信息。

+1
Clojure

当宏编译时抛出异常时,
堆栈跟踪中不含“原始行”,至少在我的情况是这样。

所以当我想查看问题“位于”我的代码中的“何处”时,堆栈跟踪并没有帮助。

尤其是对于Clojure初学者(从Java背景来看),可能不太明显宏编译正在发生,并且导致堆栈跟踪中没有“我的起始行”。

许多库使用“宏”进行“常规操作”。

1 个回答

0

你能提供一个这样的宏及其产生的异常跟踪的例子吗?

实际上编译器能做的真的不多,因为提供源信息是宏本身的职责。许多宏依赖于与宏输入绑定在一起的非显式位置信息,但更复杂的宏通常应该做更多,但不一定这么做。

如果您有可重复问题的案例和生成难以“跟踪”代码的宏,可以考虑向宏作者报告问题。根据上下文,可能会提高调试体验。

例如:我在自己编写的库中包含一些相当复杂的宏,这个辅助工具(搜索with-loc的使用)负责传输必要的元数据。没有它,错误就很难追踪到实际的代码。这适用于CLJS,同样的基本方法也适用于CLJ。

...