代码之家  ›  专栏  ›  技术社区  ›  user9750148

如何找出谁从哪里调用了一个方法?

  •  0
  • user9750148  · 技术社区  · 6 年前

    我在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 回复  |  直到 6 年前
        1
  •  2
  •   stefanobaghino    6 年前

    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
    ...