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調試我沒有在模擬器上試過,有興趣的可以進行研究;