完整报错:
今天运行项目的时候,发现项目莫名其妙的崩溃,并且没有任何的logcat错误提示信息。
没办法,只能一步一步的调试,发现调试到下面这一句的时候提示异常,并且不在继续往下执行了。
BaseRouter.route<SuperAppMainActivity>(this){
if (advLink.isNotEmpty()) putExtra("advUrl", advLink)
}
方法定义如下:
inline fun <reified T> route(
context: Context,
needLogin: Boolean = false,
requestCode: Int? = null,
interval: Int = 500,
crossinline block: Intent.() -> Unit = {}
) {
//
}
很奇怪,debug运行的时候,提示如下错误:
Can not evaluate the expression: Back-end (JVM) Internal error: Failed to generate expression: KtLambdaExpression
File being compiled: (55,166) in /Users/yanglei/develop/git_ware/gonggui/decoder-ark/app/src/main/java/com/commonrail/mft/decoder/router/BaseRouter.kt
The root cause java.lang.IllegalStateException was thrown at: org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass(CodegenBinding.java:161)
这个错误查了好久也没有找到原因。
第二天突然想到内联函数的定义,kotlin的内联函数是把对应的代码直接替换到使用处,而不是采取接口回调的方式,所以debug运行很有可能和实际运行代码是不一样的。果断换了一种常规写法,绕了过去,最终找到了问题点。
所以这个错误其实并不影响正常的运行,但是会影响debug调试的结果。另外也提醒我们,内联函数一定要是情况而用,不要乱用。