当您从异常中获得堆栈跟踪时,您将获得文件和行号。我的报告需要这样的东西,所以我可以非常快地找到原因。
我特别关注LINE和FILE宏。 Scala中有这样的东西吗?
答案 0 :(得分:6)
Scala和Java中都没有这样的宏。当然,行号信息存储在字节码中(也用于调试目的),但没有API可以获取它。
具有类名和行号的堆栈跟踪是通过本机Throwable.fillInStackTrace()
生成的。记录库也可能使用Thread.getStackTrace()
。
在这两种情况下,它归结为解析堆栈跟踪并找到我们当前的位置。请注意,生成堆栈跟踪非常耗时,应该避免使用。
答案 1 :(得分:2)
sourcecode库基于宏,并在编译时提供元数据。
示例(取自他们的页面):
object Main extends App {
def log(message: String)(implicit line: sourcecode.Line, file: sourcecode.File) =
println(s"${file.value}:${line.value} $message")
log("foo")
}
这将打印:
/Users/jhoffmann/Development/sourcecode/src/main/scala/Main.scala:5 foo
您可以在代码中的任何位置使用隐含。
答案 2 :(得分:1)
这是一个在Scala中提供宏功能的项目。
也许您可以与项目团队联系,讨论您的需求