Chromium WebView C++代码的调试
2017-03-07 23:38
411 查看
从Android 4.4开始,系统的WebView组件就采用了Chromium/Blink引擎。Chromium的代码及其庞大,理解起来也有些难度。借助于gdb调试,通过跟踪代码的运行,打印调用堆栈,有助于理解代码的执行流程。另外libchromiumwebview.so的编译链接及其耗时间,所以那种打log的方式除非不得已,还是要尽量少用。虽然Chromium for Android以及Chromium桌面版都采用了多进程模型,但Chromium WebView却是采用的单进程模型,所以调试上简单了很多。
下面以Android 5.1为例,调试脚本如下:
在执行这个脚本之前,需要设置一些android源码build的环境变量。比如为nexus 4 build系统的命令为:
如果你在调试过程中遇到讨厌的如下中断错误:
解决方法如下为,在gdb调试符下输入如下命令:
在下一片文章中,我将会说明如何调试Java部分的代码。
下面以Android 5.1为例,调试脚本如下:
#!/bin/bash # check env setup first if [ ! "$ANDROID_BUILD_TOP" ]; then echo "please source build/envsetup.sh to set env var first!" exit fi GDBSERVER_LOG=temp.log BROWSER_PACKAGE_NAME="com.android.browser" BROWSER_ACTIVITY="BrowserActivity" # adbd get root privileges adb root sleep 5 # get pid of browser PID=$(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 gdbserver gdbserver_pid=$(adb shell ps | grep "gdbserver" | awk '{print $2}') if [ "$gdbserver_pid" ]; then adb shell kill $gdbserver_pid fi # gdbserver attach browser pid in background echo "attach pid $PID in background" (adb shell gdbserver :5039 --attach $PID > $GDBSERVER_LOG 2>&1) & sleep 2 touch gdb.init readonly COMMANDS=gdb.init echo -n "" > $COMMANDS echo "ANDROID_BUILD_TOP = $ANDROID_BUILD_TOP" adb forward tcp:5039 tcp:5039 echo "file $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/bin/app_process32" >> $COMMANDS echo "set solib-absolute-prefix $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/lib" >> $COMMANDS echo "set solib-search-path $ANDROID_BUILD_TOP/out/target/product/mako/symbols/system/lib" >> $COMMANDS echo "target remote :5039" >> $COMMANDS $ANDROID_TOOLCHAIN/arm-linux-androideabi-gdb -x $COMMANDS && # kill gdbserver gdbserver_pid=$(adb shell ps | grep "gdbserver" | awk '{print $2}') if [ "x$gdbserver_pid"!="x" ]; then adb shell kill $gdbserver_pid fi echo "done"
在执行这个脚本之前,需要设置一些android源码build的环境变量。比如为nexus 4 build系统的命令为:
source ./build/envsetup.sh lunch aosp_mako-userdebug
如果你在调试过程中遇到讨厌的如下中断错误:
Program received signal SIG33, Real-time event 33.
解决方法如下为,在gdb调试符下输入如下命令:
(gdb) handle SIG33 nostop noprint noignore pass
在下一片文章中,我将会说明如何调试Java部分的代码。
相关文章推荐
- Android Chromium for WebView代码结构
- android:如何通过chrome远程调试APP中的webView的h5代码
- Android Chromium for WebView代码结构
- android webview type=file文件上传,安卓端代码
- webview chromium v35网页加载触发时机
- Android WebView与JavaScript代码交互
- Android 与WebView中的js代码的交互记录
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- android studio 使用c++ 原生代码开发,调试
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- Android安全--webview远程代码执行漏洞
- 记录WKWebView调整自适应,插入js代码
- iOS开发Safari调试WebView页面
- Android WebView中的JavaScript代码使用
- 第一行代码总结:10网络:10.1WebView的用法
- Android之Webview使用Java代码和JS相互调用
- 【COCOS2DX-ANDROID-游戏开发之二五】 调试 C++代码
- Android【WebView】 防止调用系统浏览器打开页面 看了好多朋友写的代码我在整理了
- Xamarin.Form中WebView调用JS代码和JS代码调用客户端程序
- 正常调试一个web项目的java代码