Kotlin crash堆栈分析

示例问题:

kotlin和java代码报错堆栈信息的差异

  • 报错堆栈的行数信息表示不同
    • java的报错行数是当前类的的第N行
    • kotlin的报错行数是当前指向的函数的第N行
      • 如示例问题中,第二行的报错信息【PlayVM$play$1.invoke(PlayVM.kt:3)】是指PlayVM类的play方法的第一个匿名内部类的invoke方法的第三行
  • 查询的类不同
    • kotlin的报错指向的是kotlin转换成的java代码。即kotlin --> bytecode --> java
      • 可以使用android studio自带功能进行转换
      • java的报错直接在对应java类中查找即可

示例问题分析过程

  • 第7行和第6行
  • 如下图所示,loadSongList的第二个匿名类的第一个invoke方法调用了重载的第二个invoke方法。代码实现和堆栈调用一致。
  • 第5行和第4行
    • 如下图所示,代码实现和堆栈调用一致。
  • 第3行、第2行和第1行
    • 如下图所示

写在最后

  • 对于有些个别的堆栈行数对应不上的,说明apk编译的class和本地studio反编译出来的代码不一致,不一致的原因猜测是编译器对代码执行的顺序做了优化。但是根据代码以及堆栈调用信息仍然可以定位到具体代码位置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值