如何在Kotlin中打印调用栈?
Kotlin打印调用栈的几种实用方法
在Kotlin里打印调用栈有几种简单直接的方式,根据你的需求选择即可:
利用当前线程的栈轨迹
直接获取当前线程的stackTrace数组,遍历打印每个栈帧信息,每个元素包含类名、方法名、文件名和行号:fun printCallStack() { Thread.currentThread().stackTrace.forEach { println(it) } }如果不想包含当前打印方法本身的栈帧,可以用
drop(1)过滤掉第一个元素:fun printCallStack() { Thread.currentThread().stackTrace.drop(1).forEach { println(it) } }通过Throwable对象打印
创建一个Throwable实例,调用它的printStackTrace()方法,默认会把栈信息输出到标准错误流:fun printCallStack() { Throwable().printStackTrace() }要是想把栈信息输出到文件或者其他输出流,用带参数的重载方法:
fun printCallStackToFile() { val writer = java.io.PrintWriter("call_stack.txt") Throwable().printStackTrace(writer) writer.close() }在异常处理中打印
如果是在捕获异常的场景下,直接调用异常对象的printStackTrace()就行,这时候的栈信息会包含异常触发点的完整调用链:try { // 这里写可能抛出异常的代码 throw RuntimeException("测试异常") } catch (e: Exception) { e.printStackTrace() }
内容的提问来源于stack exchange,提问作者刘路扬
相关产品推荐
相关产品推荐

