<
打印函数调用栈
>
上一篇

Ubuntu实时网速显示
下一篇

Js常用工具包

打印函数调用栈

fun logStack(text: CharSequence?) {
    Log.e("Debug", text, Throwable(text))
}
fun logStack(text: CharSequence?) {
    Log.e("Debug", Log.getStackTraceString(Throwable("$text")))
}

手动拼接这个格式的log 也可以打印调用栈定位代码位置

val stacktrace = Thread.currentThread().stackTrace
Log.e("Debug", "(" + stackTrace[2].fileName + ":" + stackTrace[2].lineNumber + ")")
Log.e("Debug", "(" + stackTrace[3].fileName + ":" + stackTrace[3].lineNumber + ")")
Log.e("Debug", "(" + stackTrace[4].fileName + ":" + stackTrace[4].lineNumber + ")")

另外还可以借用第三方库打印函数调用栈,例如

Logger2 初始化时传入的 methodCount 结合 methodOffset

        FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
//                .showThreadInfo(false)    //(可选)是否显示线程信息。 默认值为true
                .methodCount(3)           //(可选)要显示的方法行数。 默认2
//                .methodOffset(7)          //(可选)隐藏内部方法调用到偏移量。 默认5
//                .logStrategy(customLog)   //(可选)更改要打印的日志策略。 默认LogCat
                .tag(Constants.ACADSOC_LOG) //(可选)每个日志的全局标记。 默认PRETTY_LOGGER
                .build();
        Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy) {
            @Override
            public boolean isLoggable(int priority, String tag) {
                return AppUtils.isAppDebug();//release版本不打印
            }
        });
Top
Foot