环境:Amlogic S905M2 +
ubunt12.04 + win7 + adt_bundle_linux + Android SDK
过程:
1.
为避免用Eclipse基础版本(Luna)后需要安装包括adt、cdt等插件麻烦,直接解压adt_bundle_linux安装IDE环境
2.
调试准备:目标设备(Amlogic S905M2
)中需要有gdbserver;host主机(ubuntu)中需要交叉编译版本的gdb。gdb可采用$(AOSPROOT)\prebuilts\gcc\linux-x86\arm\arm-eabi-4.7\bin已编译好的版本(这里需要注意的是$(AOSPROOT)\prebuilts\gcc\linux-x86\arm目录下存在多个版本,选择--version执行无差错的,仅供参考),相应的在目录$(AOSPROOT)\prebuilts\misc\android-arm\gdbserver,ps:注意确保两者版本的一致性。
3. 具体步骤:
(1)新建工程项目,导入代码。启动Eclipse后,File->New Project->Makefile Project
with Existing Code
(2)点击Next,配置project,点击Finish
(3)设置property。载入源码为了编辑和跟踪,而不是为了编译工程,因此需要Disable编译选项。在Property窗口中的C/C++
Build中的Builder Settings中取消Use default build
command,并随意填写个编译器的名称
(4)编译要调试部分源码的debug版本(带调试symbol,AOSP源码在linux中编译)。
cd $(AOSPROOT)
#source
build/envsetup.sh
#lunch
$(DEVICE_MODULE_NAME)(仅限于与Amlogic S905M2 相关的device部分)
#cd
$(AOSPROOT)/framework/native/services/surfaceflinger
#vi
Android.mk (将其中的LOCAL_CFLAGS加上"
-O0 -g ")
#mm
-B LOCAL_STRIP_MODULE=false
(5)烧录。不采取整体的烧录,只将前一步骤生成的libsurfaceflinger.so上传至设备的/system/bin目录中,reboot设备重启即可
#adb
connect DeviceIP
#adb
push
$(AOSPROOT)/out/target/product/XXX/symbols/system/lib/libsurfaceflinger.so
#reboot
(6)远程调试其它配置。在Eclipse调试之前,需要告诉gdb哪里去查找标准库的符号信息,新建配置文件gdb4android.cmds,添加如下内容
set
solib-absolute-prefix
$(AOSPROOT)/out/target/product/cmcc_zhejiang/symbols
set
solib-search-path
$(AOSPROOT)/out/target/product/cmcc_zhejiang/symbols/system/bin:
solib-search-path
$(AOSPROOT)/out/target/product/cmcc_zhejiang/symbols/system/lib
(7)Debug
Configuration配置如下
展开Debug
Tab,设置GDB debugger和GDB command file,点击Apply后Close
点击Debugger的子TAB-Connection
(8)设置调试会话
Device端:
setprop
service.adb.tcp.port 5555
stop
adbd
start
adbd
host端:
#adb
connect DeviceIP
#adb
forward tcp:10000 tcp:10000
#adb
shell gdbserver :10000
--attach THREADIP(THREADIP为SurfaceFlinger进程ID号)
Eclipse点击Debug后,在device端任意移动焦点就可进入断点(SurfaceFlinger相关类中)
调试Android
Framework本地代码部分通常采用打印输出来进行调试较为普遍,而常用上述直观的断点调试在整个过程中会遇到诸多的问题,连接问题、设备弹出、设备重启需要重新设置连接等,所幸最终能成功搭建好并成功进入设置的断点,也是碰到并解决了诸多的问题,使用各种工具,mark一下^@^