Chromium WebView C++代码的调试
来源:互联网 发布:java开发网上商城 编辑:程序博客网 时间:2024/05/20 02:30
从Android 4.4开始,系统的WebView组件就采用了Chromium/Blink引擎。Chromium的代码及其庞大,理解起来也有些难度。借助于gdb调试,通过跟踪代码的运行,打印调用堆栈,有助于理解代码的执行流程。另外libchromiumwebview.so的编译链接及其耗时间,所以那种打log的方式除非不得已,还是要尽量少用。虽然Chromium for Android以及Chromium桌面版都采用了多进程模型,但Chromium WebView却是采用的单进程模型,所以调试上简单了很多。
下面以Android 5.1为例,调试脚本如下:
#!/bin/bash# check env setup firstif [ ! "$ANDROID_BUILD_TOP" ]; then echo "please source build/envsetup.sh to set env var first!" exitfiGDBSERVER_LOG=temp.logBROWSER_PACKAGE_NAME="com.android.browser"BROWSER_ACTIVITY="BrowserActivity"# adbd get root privilegesadb rootsleep 5# get pid of browserPID=$(adb shell ps | grep $BROWSER_PACKAGE_NAME | awk '{print $2}')echo "pid of $BROWSER_PACKAGE_NAME is $PID"if [ ! "$PID" ]; then adb shell am start -n $BROWSER_PACKAGE_NAME/.$BROWSER_ACTIVITY sleep 2 PID=$(adb shell ps | grep $BROWSER_PACKAGE_NAME | awk '{print $2}')fi# kill gdbservergdbserver_pid=$(adb shell ps | grep "gdbserver" | awk '{print $2}')if [ "$gdbserver_pid" ]; then adb shell kill $gdbserver_pidfi# gdbserver attach browser pid in backgroundecho "attach pid $PID in background"(adb shell gdbserver :5039 --attach $PID > $GDBSERVER_LOG 2>&1) &sleep 2touch gdb.initreadonly COMMANDS=gdb.initecho -n "" > $COMMANDSecho "ANDROID_BUILD_TOP = $ANDROID_BUILD_TOP"adb forward tcp:5039 tcp:5039echo "file $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/bin/app_process32" >> $COMMANDSecho "set solib-absolute-prefix $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/lib" >> $COMMANDSecho "set solib-search-path $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/lib" >> $COMMANDSecho "target remote :5039" >> $COMMANDS$ANDROID_TOOLCHAIN/arm-linux-androideabi-gdb -x $COMMANDS &&# kill gdbservergdbserver_pid=$(adb shell ps | grep "gdbserver" | awk '{print $2}')if [ "x$gdbserver_pid"!="x" ]; then adb shell kill $gdbserver_pidfiecho "done"
在执行这个脚本之前,需要设置一些android源码build的环境变量。比如为nexus 4 build系统的命令为:
source ./build/envsetup.shlunch aosp_mako-userdebug
如果你在调试过程中遇到讨厌的如下中断错误:
Program received signal SIG33, Real-time event 33.
解决方法如下为,在gdb调试符下输入如下命令:
(gdb) handle SIG33 nostop noprint noignore pass
在下一片文章中,我将会说明如何调试Java部分的代码。
0 0
- Chromium WebView C++代码的调试
- [Chromium] Chromium Android WebView层的设计
- Android Chromium for WebView代码结构
- Android Chromium for WebView代码结构
- Chromium WebView
- 理解WebKit和Chromium: 基于Chromium内核的Android WebView
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Chromium on Android: 分析Chromium WebView的软件渲染方式
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Chromium on Android: 理解Chromium WebView的绘制模型
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- android4.4 webview chromium显示网页的chromium内核结构
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Chromium on Android: 理解Chromium WebView的绘制模型
- Chromium Graphics: 再谈Chromium WebView硬件渲染模式的演进
- 理解Webkit和chromium:基于chromium内核的webview
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Android4.4 webview chromium显示网页的chromium内核结构
- Java入门问题:找不到或无法加载主类
- PTX ISA 之 同步指令 bar & membar
- https环境搭建之体验过程及原理与总结
- hdu 3555 Bomb (数位DP)
- MongoDB的正确使用姿势
- Chromium WebView C++代码的调试
- Spring+SpringMVC+Mybatis+Restful+Maven多模块项目集成
- 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践
- call by value or reference
- Android studio出现Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"的解决办法
- Java Web01之初识servlet和request
- 精进-每一个成功者都是唯一的
- ROS总结——ROS节点
- 2的幂次方表示