2016-03-24 20 views

回答

2

這取決於你想要做什麼。

隨着scala-trace-debug庫,你可以輸入這樣的事情:

Debug.trace(1 + 2) 

而得到這樣的:

"3" in thread main: 
    path.to.file(file.Scala: 22) // click-able stack trace 

您可以自定義堆棧跟蹤的行數,像這樣:

Debug.trace(1 + 2, 3) // 3 lines of stack trace 

如果你做info.collaboration_station.debug._,你甚至可以這樣做:

val three = 3.trace 

...

"3" in thread main: 
    path.to.file(file.Scala: 22) 

最後,有一個表達式的支持:不同於其他圖書館

Debug.traceExpression{ 
    val myVal = 4 
    1 + 2 + myVal 
} 

...

"{ 
    val myVal = 4; 
    (3).+(myVal) 
} -> 7" in thread main: 
    at main.Main$.main(Main.scala:12) 

,這是更面向調試。如果我想提供正在發生的事情的歷史記錄,並且我不希望用戶看到堆棧跟蹤,我不會使用此工具。

3

查看Haoyi Li的sourcecode圖書館,我認爲它給了你你要找的東西。

源代碼是一個小Scala庫對提供在運行時常見的「源代碼 」上下文到您的程序,類似於Python的 __name__,C++的__LINE__或Ruby的__FILE__。例如,您可以通過()語法或通過隱式的方式請求 當前文件的文件名和行號。

見例如https://github.com/lihaoyi/sourcecode#logging

您可以使用sourcecode.File和sourcecode.Line定義日誌 功能,可自動捕捉它們的行號和文件名

def log(foo: String)(implicit line: sourcecode.Line, file: sourcecode.File) = { 
    println(s"${file.value}:${line.value} $foo") 
} 

log("Foooooo") // sourcecode/shared/src/test/scala/sourcecode/Tests.scala:86 Fooooo