vs2013做简单的网站,营销网络分布情况,制作网站难还是编程难,wordpress首页字体大小文章目录 如何区分源码中 main system events 日志查看 Activity 生命周期日志分析 events 日志在源码中位置应用进程ID助分析具体应用ProtoLog 动态开关日志如何快速定位相关流程的代码位置 本文首发地址 https://h89.cn/archives/285.html 最新更新地址 https://gitee.com/ch… 文章目录 如何区分源码中 main system events 日志查看 Activity 生命周期日志分析 events 日志在源码中位置应用进程ID助分析具体应用ProtoLog 动态开关日志如何快速定位相关流程的代码位置 本文首发地址 https://h89.cn/archives/285.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 从 adb常用命令详解–提升开发效率利器 中我们已经知晓了 adb logcat 分析过滤关键日志的方法。本文进一步介绍日常日志分析的一些小技巧。
如何区分源码中 main system events 日志
他们有如下对应关系
类别源码中打印日志的方式mainandroid.util.Log.i(…)systemandroid.util.Slog.id(…)eventsandroid.util.EventLog.writeEvent(…)
查看 Activity 生命周期日志
如下过滤 events 可以看到 activiy 生命周期等相关日志 adb shell logcat -b events |grep wm
06-15 13:32:27.689 5940 5940 I wm_on_idle_called: com.miui.home.launcher.Launcher
06-15 13:32:27.710 2675 6055 I wm_set_resumed_activity: [0,com.miui.home/.launcher.Launcher,setFocusedTask-alreadyTop]
06-15 13:32:28.444 2675 6523 I wm_add_to_stopping: [0,166067102,com.tencent.mm/.ui.LauncherUI,makeInvisible]
06-15 13:32:28.444 2675 6523 I wm_pause_activity: [0,166067102,com.tencent.mm/.ui.LauncherUI,userLeavingtrue,finishTransition]
06-15 13:32:28.461 17144 17144 I wm_on_paused_called: [0,166067102,com.tencent.mm.ui.LauncherUI,performPause,16]
06-15 13:32:28.465 2675 2721 I wm_stop_activity: [0,166067102,com.tencent.mm/.ui.LauncherUI]
06-15 13:32:28.502 17144 17144 I wm_on_stop_called: [0,166067102,com.tencent.mm.ui.LauncherUI,STOP_ACTIVITY_ITEM,19]分析 events 日志在源码中位置
如何知晓如上日志中 wm_on_stop_called 是在哪打印的呢?
chenU2204:~/aosp$ source build/envsetup.sh
chenU2204:~/aosp$ cd frameworks/base/
chenU2204:~/aosp/frameworks/base$ jgrep WmOnStopCalled
./core/java/android/app/Activity.java:8840: EventLogTags.writeWmOnStopCalled(mIdent, getComponentName().getClassName(), reason,如上通过把 wm_on_stop_called转为 WmOnStopCalled 再检索就能在 Framework 看到日志打印的位置
应用进程ID助分析具体应用
上文日志中 17144 代表 应用进程的ID通过如下命令可以过滤 17144 进程的所有日志 cat log.txt | grep 17144 注意空格哦 cat log.txt | grep 17144 17144.log.txt 导出过滤后的日志到独立文件以便后续分析
ProtoLog 动态开关日志
在 Framework 源码中经常可见 ProtoLog.v 相关日志 比如 frameworks/base/services/core/java/com/android/server/wm/WindowState.java 中 ProtoLog.v(WM_DEBUG_RESIZE,.... 如果需要开启关闭相关日志可以使用如下命令 adb shell wm logging enable-text WM_DEBUG_RESIZE WM_DEBUG_REMOTE_ANIMATIONS WM_DEBUG_ANIM WM_DEBUG_APP_TRANSITIONS_ANIM WM_DEBUG_APP_TRANSITIONS WM_DEBUG_STARTING_WINDOW WM_DEBUG_STATES WM_SHOW_SURFACE_ALLOC WM_SHOW_TRANSACTIONS WM_DEBUG_ORIENTATION adb shell wm logging disable-text WM_DEBUG_RESIZE 更多使用方式参考 adb shell wm logging -h
Window manager logging options:start: Start proto loggingstop: Stop proto loggingenable [group...]: Enable proto logging for given groupsdisable [group...]: Disable proto logging for given groupsenable-text [group...]: Enable logcat logging for given groupsdisable-text [group...]: Disable logcat logging for given groups
Not handled, please use adb shell dumpsys activity service SystemUIService WMShell if you are looking for ProtoLog in WMShell如何快速定位相关流程的代码位置
熟悉相应的模块及代码配合IDE快捷键定位文件函数通过日志的TAG定位文件配合 jgrep / cgrep / resgrep 等快速定位关键词位置在一定会调用的位置添加日志android.Util.Log.d(TAG,out stack:, new Exception())打印函数调用的堆栈AS Debug 断点效果同上需要用 Android Studio 导入源码然后选择断点的进程(需要ROOT版本)断点分析堆栈及当前变量值。adb shell dumpsys activity containers 、 adb shell dumpsys window w 或使用 winscope可以查看协助分析当前显示那些窗口 相关链接
Git配置和常用命令安卓软件开发常用命令集合adb常用命令详解–提升开发效率利器安卓Framework开发快速分析日志及定位源码