Android上GDB的使用

摘要:
在Android手机开发平台的emulator里,有两种方式可以做Gdb调试:直接使用GdbServer或利用Gdb调试进行调试。
转自:blog.163.com/bjtornado@yeah/blog/static/69510484201081181657449/

1) 编译包含Debug 信息
设置如下环境变量:
TARGET_BUILD_TYPE=debug
TARGET_STRIP_MODULE=false (发现即使设置编译为Debug模式, 最后生成的文件系统中的程序和库还是会被strip. 设置此选项可以避免被strip)不过还要需要修改一下build/core/combo/linux-arm.mk, 否者即使设置TARGET_STRIP_MODULE=false也无效
修改
113: TARGET_STRIP_MODULE:=true

ifeq ( $(strip $(TARGET_STRIP_MODULE)),,)
TARGET_STRIP_MODULE := true
endif
然后 make
2) 在板子上启动gdb server
gdb-server IP-address:Port 可执行程序
或者
gdb-server IP-address:Port --attach 程序的PID
(Note: IP-Address是目标板自己的IP地址, 此选项可以省略)
3) 在主机端
(前提: 进入 android 目录, 执行过 source build/envsetup.sh)
#gdbclient 在板子上执行的程序名称
(默认已经设置好如下信息, 无需自己设置
set solib-absolute-prefix /absolute-source-path/out/debug/target/product/product-name/symbols
set solib-search-path /absolute-source-path/out/debug/target/product/product-name/symbols/system/lib)
(gdb) target remote 板子的ip-address:port
(gdb) b main
(gdb) c
程序会停在main函数
补充:
如果板子上找不到gdb-server, 可以到如下地址下载已经做好的: http://ortegaalfredo.googlepages.com/android
gdb在android开发中的使用相信很多开发人员都很想掌握,今天我们就用gdb在Android Emulator中进行调试,让大家学习gdb调试。在Android手机开发平台的emulator里,有两种方式可以做Gdb调试:直接使用GdbServer或利用Gdb调试进行调试。
1、利用Gdb Server进行调试:
A、从下面的链接中下载针对Android的Gdb Server http://www.billrocks.org/android_libs/bin/
B、把下载的Gdb Server安装到你的emulator 中
1)、 启动emulator
2)、下载Gdb Server到你的emulator
打开一个终端,运行:
$ adb shell
#cd data
#mkdir bin
在另外一个终端里运行:
$ adb push gdbserver /data/bin
这样通过Android自己的adb,把gdbserver 下载到emulator 中了。
C、运行gdbserver :
# /data/bin/gdbserver 10.0.2.2:1234 [args...]
D、回到另一终端,映射端口:
$telnet localhost 5554
telnet到emulator 中,运行下面的命令:
redir add tcp:1234:1234
E、在第三个终端中运行 gdb:
$gdb test
test 是你要调试的程序,然后在gdb命令行运行:
(gdb) target remote localhost:1234
然后你就可以像以前用gdb那样进行程序调试了。
2、直接用本地Gdb进行调试
A、从下面的链接中下载Android调试包,它是用Android的toolchain编译好的二进制文件:
http://ortegaalfredo.googlepages.com/android-debug.tbz
B、解压调试包,然后把gdb下载到你的emulator 中,当然如果你有真的手机,也可以这样调试:
$adb push gdb /data/bin
C、利用adb连接到emulator
$adb shell
运行gdb,会出现下面的信息:
# /data/bin/gdb
dlopen failed on 'libthread_db.so.1' - libthread_db.so.1: cannot open shared object file: No such file or directory
GDB will not be able to debug pthreads.
GNU gdb 6.7
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=arm-none-linux-gnueabi --target=".
(gdb)
D、 然后你就可以像以前用gdb那样对程序进行调试了。

免责声明:文章转载自《Android上GDB的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(zxing.net)二维码PDF417的简介、实现与解码v-for中使用v-chart,显示相同的echarts图,数值不同,均要自适应下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android体系结构介绍

   1)应用程序层          Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是       用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个    ...

Android基础:什么是Android?

Android is a software stack for mobile devices that includes an operating system, middleware and key applications. The Android SDK provides the tools and APIs necessary to begin d...

Android编程获取手机型号,本机*,sdk版本号及firmware版本号号(即系统版本号号)

Android开发平台中,可通过TelephonyManager 获取本机号码。 TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneNumber.setText(phoneMgr.getLine1Num...

Android 4.0 SDK的离线方式安装(转)

转自:http://networking.ctocio.com.cn/110/12195610.shtml  作 为一个IT技术人员,迫不及待地就奔向了http://developer.android.com去看看有没有新的SDK公布出来,当时是上午,没见到 有更新,心想一定是若干天后才会发布。没想到同事下午告诉我,新版的SDK已经发布了。当时是临下班,...

Android读取JSON格式数据

Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法。 JSON 是轻量级的文本数据交换格式 JSON 独立于语言 JSON 具有自我描写叙述性,更易理解 相比 XML 的不同之处: 没有结束标签 更短 读写的速度更快 使用数组 不...

Activity切换动画---点击哪里从哪放大

本篇文章已授权微信公众号 安卓巴士Android开发者门户 独家发布 emmmm,这次来梳理一下 Activity 切换动画的研究。首先,老规矩,看一下效果图: 效果图 这次要实现的动画效果就是类似于上图那样,点击某个 view,就从那个 view 展开下个 Activity,Activity 退出时原路返回,即缩放到点击的那个 view。 实现思路 e...