如何找出哪个方法和方法?

时间:2018-05-22 12:14:34

标签: scala methods

我在Scala中查看一些遗留代码并查看方法:

private def method1 (value: AnyRef, fieldName: String, qualifiedFieldName: String, fieldType: Type, schema: Schema)
                         (implicit mode: ParseMode): Any = {...}

如何查看谁(或谁可以调用)此方法(从哪里)? (在IDE / InteliJ中跟踪很好 - 只是想'跟踪'谁正在调用方法以了解代码路由)..

在方法名称(方法体内)之后的理想print line将是:
This method is being called from this class etc...

1 个答案:

答案 0 :(得分:2)

您可以使用Thread.currentThread.getStackTrace()来实现这一目标。

您可以在the official documentation上找到有关该信息的更多信息。

返回Array[StackTraceElement],其中每个StackTraceElement包含调用者的类,方法,文件名和行号,从调用堆栈的顶部到底部排序。

您可以在Scala shell中运行以下方法以了解结果:

def stackTraceInfo(thread: Thread): Seq[String] =
  thread.getStackTrace.map(ste => s"${ste.getClassName}.${ste.getMethodName}")

例如可以产生如下内容:

scala> stackTraceInfo(Thread.currentThread).foreach(println)
java.lang.Thread.getStackTrace
$line7.$read$$iw$$iw$.stackTraceInfo
$line10.$read$$iw$$iw$.<init>
$line10.$read$$iw$$iw$.<clinit>
$line10.$eval$.$print$lzycompute
$line10.$eval$.$print
$line10.$eval.$print
...