排查问题

190 阅读2分钟

如何定位一个View在哪里

如果这个view可以点击,在OnClickListener的OnClick方法上面打个断点

如果这个View无法点击,请在View的OnTouch方法添加断点,用手触摸一下即可。

点击一下命中之后即可在左下角的调用栈看到对应的View.

如何输出一个方法的调用栈

我们知道如果这个方法只被执行一次,那么你在这个方法上添加一个断点然后执行一次看debug调用栈就好了,但是如果这个方法被很快速的调用,那么大概率断点会卡死或者不调用,实战中是这样的。

如果这个方法可以被你修改,那么加一句log

Log.d("xx","xx",new Throwable("xx"));

这样在log中过滤这句话就能看到所有的方法调用栈了。

如果这个方法不能被你修改怎么办?比如我想看一个sdk中被混淆的方法,我无法进行修改。

此处推荐一个aop框架:github.com/eleme/lance…

集成这个框架之后,我举一个输出onTouch事件的log调用栈

@TargetClass("android.view")
@Proxy("onTouchEvent")
public boolean onTouchEvent(MotionEvent event) {
    Log.d("xx", "xx", new Throwable("xx"));
    return (boolean) Origin.call();
}

如何知道当前Activity是哪个

在log中ActivityManager,并且选择为No Filters,然后即可看到当前Activity启动的是哪个,并且能看到启动的参数。

如何知道当前App的布局状况

如果你的项目中集成了stetho,打开你的chrome浏览器,输入

chrome://inspect/

然后你就能进入到一个页面

点击inspect即可进入到布局管理中

这里打马赛克的位置就是布局文件,鼠标放在上面,手机上会实时显示这个布局所在的区域,用蓝色高亮。十分方便。