欢迎!请看关于页面以了解更多此网站的详细信息。
当宏编译时抛出异常时,堆栈跟踪中不含“原始行”,至少在我的情况是这样。
所以当我想查看问题“位于”我的代码中的“何处”时,堆栈跟踪并没有帮助。
尤其是对于Clojure初学者(从Java背景来看),可能不太明显宏编译正在发生,并且导致堆栈跟踪中没有“我的起始行”。
许多库使用“宏”进行“常规操作”。
你能提供一个这样的宏及其产生的异常跟踪的例子吗?
实际上编译器能做的真的不多,因为提供源信息是宏本身的职责。许多宏依赖于与宏输入绑定在一起的非显式位置信息,但更复杂的宏通常应该做更多,但不一定这么做。
如果您有可重复问题的案例和生成难以“跟踪”代码的宏,可以考虑向宏作者报告问题。根据上下文,可能会提高调试体验。
例如:我在自己编写的库中包含一些相当复杂的宏,这个辅助工具(搜索with-loc的使用)负责传输必要的元数据。没有它,错误就很难追踪到实际的代码。这适用于CLJS,同样的基本方法也适用于CLJ。
with-loc