chromium代码量很大,要梳理流程如果直接扎进去看代码,估计会看的泪崩,当然大神级别的另当别论哈。我去看罗升阳罗老师的博客很详细也不算很深,但是是边看边忘,还是自己老老实实的跟代码,再做些笔记,毕竟好记性不如烂笔头。
如下是 我在跟chromium过程中的一些手段:
1 Java代码
1.1 log打印:
使用org.chromium.base.log,用法和 android.util.Log一样 ;
1.2 打印堆栈,打印出调用关系:
Exception e = new Exception("for chromium java debug");
e.printStackTrace();
1.3 调用跟踪:
TraceEvent.begin/TraceEvent.end
2 c++代码
2.1 log打印:
2.1.1 LOG(INFO) « “Found “«num_cookies«” cookies”,包含四种日志级别:FATAL,ERROR,WARNING,INFO。FATAL会
在日志输出后自动引发一个crash;
2.1.2 包含头文件#include <android/log.h>,调用安卓log接口
#define BR_LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) ;
2.2 打印调用堆栈:
在需要打印的文件中包含头文件#include "base/debug/stack_trace.h",
在需要打印堆栈函数地方调用base::debug::StackTrace().Print();
然后编译,抓取日志,从日志中应该可以抓到如下信息,将红线部分提取出来,就是我们需要的堆栈信息。
通过安卓addr2line命令将堆栈信息转为调用关系,命令如下:
./third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line -e ./out/Default/lib.unstripped/libstandalonelibwebviewchromium.so addr1 addr2 ......(add1、addr2对应的是堆栈的地址);
如下是我根据堆栈信息,获取的函数调用关系。
3 devtools调试
可以通过devtools工具对页面进行调试,可以统计各部分耗时便于性能优化,也有内存统计、分析工具便于内存的优化,此部
分调试可参照如下地址;
https://developers.google.com/web/tools/chrome-devtools
https://blog.csdn.net/z_liny/article/details/79663645
4 通过GDB调试,GDB调试我没有在模拟器上试过,有兴趣的可以进行研究;