大胖 发表于 2016-12-28 10:29

smalidea的坑,注意了

本帖最后由 大胖 于 2019-1-4 21:34 编辑

用过smalidea动态调试smali的朋友应该有遇过一个问题:

乱跳!总不能照着指令一步步走!或Watch不了寄存器!

smalidea官网有提到,IDEA的版本必须14.1或以上,才能单步调试,否则是按照行号(.line)执行而非smali指令。
原文:

但这里有坑!实际上只有IDEA 14.1能单步,更高版本都不行
这是我测试多个版本的的结论
但IDEA 14.1还是无法watch寄存器...

我花了几天测试各版本的IDEA / Android Studio 后发现smalidea都有bug(不是无法单步 不然就是无法watch)
结果发现作者其实有修复smalidea的bug,但只更新源码而为释出插件成品(作者提供的插件成品是有bug的旧版)
因此我下载最新源码自己编译了成品(https://pan.baidu.com/s/1BYBrZudKh8caIQuwdkEu4Q提取码8pcf)
测试后发现可以在IDEA15.0.6 正常运作(其他版本懒得测试了)
如果不想踩坑,请直接下载IDEA15.0.6 + 我编译的smalidea

另外调试时DDMS请开着 听我的,省麻烦(port设置8700,不需要adb forward)

要好好用个smalidea真是折腾阿
希望别再出问题啦

wsgh 发表于 2017-1-5 20:06

大胖 发表于 2017-1-2 16:24
有, 使ro.debuggable为1 , 所有进程就都能被调试.
使ro.debuggable为1, 有4种手段:
1.使用虚拟机(例如g ...

大神,还有一个问题想请教你:我经常需要在有源码的情况下,debug一个release的apk,但是使用setpropex搞定后,发现其中只能看到一个对象的成员变量的值,无法看到方法执行过程中的局部变量的值,不知道你有没有遇到过呢?之前使用Eclipse和现在用AndroidStudio都存在此问题。但是直接debug run出来的没啥问题。

大胖 发表于 2017-1-2 16:24

本帖最后由 大胖 于 2017-1-2 16:31 编辑

wsgh 发表于 2016-12-31 15:40
请问一个debugable为false的apk有没有什么办法能直接调试啊?DDMS里不显示啊
有, 使ro.debuggable为1 , 所有进程就都能被调试.
使ro.debuggable为1, 有4种手段:
1.使用虚拟机(例如genymotion , 它的系统的ro.debuggable为1)
2.使用xposed 的BuildProp Enhancer或Xinstaller模块 可以动态修改ro.debuggable
3.自己编译安卓系统 以修改ro.debuggable
4.使用setpropex 也可以动态修改ro.debuggable

sstm 发表于 2016-12-30 11:38

zhanghao88 发表于 2016-12-30 15:27

多谢提醒,以后试试

summon 发表于 2016-12-30 16:25

之前调试确实遇到过这个坑,升级到android studio2.2.1后单步就不好使了。

小理想 发表于 2016-12-30 17:55

谢谢提醒,下载试试

chaowei007 发表于 2016-12-31 10:58

那我现在用的是Android Studio 2.2.1 怎么办?

wsgh 发表于 2016-12-31 15:40

请问一个debugable为false的apk有没有什么办法能直接调试啊?DDMS里不显示啊

大胖 发表于 2017-1-2 16:25

chaowei007 发表于 2016-12-31 10:58
那我现在用的是Android Studio 2.2.1 怎么办?

你这版本如果不行就用IDEA14.1

wsgh 发表于 2017-1-3 15:00

大胖 发表于 2017-1-2 16:24
有, 使ro.debuggable为1 , 所有进程就都能被调试.
使ro.debuggable为1, 有4种手段:
1.使用虚拟机(例如g ...

感谢大神指点~之前只是了解到是ro.debuggable这个值的问题,但是我曾经直接修改build.prop,但是忘记是因为没有找到这个值,还是加了这个值没有效果,反正最终没有成功。
使用xposed没想到这个,得去研究研究。
至于你说的setpropex,没听说过,我也去研究研究~
谢了~
页: [1] 2 3 4
查看完整版本: smalidea的坑,注意了