2016-03-24 4 views

Répondre

2

Cela dépend de ce que vous voulez faire.

Avec la bibliothèque scala-trace-debug, vous pouvez taper quelque chose comme ceci:

Debug.trace(1 + 2) 

Et obtenez ceci:

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

Vous pouvez personnaliser le nombre de lignes de trace de la pile, comme ceci:

Et si vous faites info.collaboration_station.debug._, vous pouvez même faire ceci:
Debug.trace(1 + 2, 3) // 3 lines of stack trace 
val three = 3.trace 

...

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

Enfin, il y a le support des expressions:

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

...

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

Contrairement à l'autre bibliothèque, ce qui est plus orienté vers le débogage. Si je voulais fournir un historique de ce qui se passait et que je ne voulais pas que l'utilisateur voie une trace de pile, je n'utiliserais pas cet outil.

3

Vérifiez la bibliothèque sourcecode de Haoyi Li, je pense que cela vous donne ce que vous cherchez.

SourceCode est une petite bibliothèque Scala pour qui fournit un contexte "code source " commune à votre programme lors de l'exécution, semblable à __name__, __LINE__ de C++ ou le __FILE__ Ruby Python. Par exemple, vous pouvez demander le nom de fichier et le numéro de ligne du fichier en cours, soit via la syntaxe() ou via un implicite.

Voir par exemple https://github.com/lihaoyi/sourcecode#logging

Vous pouvez utiliser sourcecode.File et sourcecode.Line pour définir log fonctions qui capture automatiquement leur numéro de ligne et de nom de fichier

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