一、引言
使用Android 预装 gdbserver 调试 动态库时出现,Segmentation fault错误。不得不使用现有编译链重新编译一份gdbserver。多谢Android
- How-to Rebuild gdbserver这篇文章,参考这篇文章我的解决过程如下。
这里要强调一点:下面编译sysroot时sysroot的目标路径,和编译gdbserver时指定的sysroot路径,一定要使用[绝对路径]。我编译过程中,曾因未使用绝对路径浪费不少精力。
二、开发环境
Ubuntu 11.04
编译通过的Android 2.3 源码
三、解决过程
1、因已经有了Android 2.3源码,省去下载源码并编译的漫长过程。
#设置Android源码目录为环境变量:$ANDROID_SRC
simba@simba-Vostro-3400:~$ export ANDROID_SRC=/home/simba/neptune/android_2.3
2、下载gdb源码,并打补丁
simba@simba-Vostro-3400:~$ mkdir gdb_build
simba@simba-Vostro-3400:~/neptune/gdb_src$ git clone https://android.googlesource.com/toolchain/gdb.git
#坐等下载完毕,然后...
#将以下保存成.patch文件
#打补丁
simba@simba-Vostro-3400:~/gdb_build$ cd gdb/
simba@simba-Vostro-3400:~/gdb_build/gdb$ patch -p1 <./gdb_patch.patch
3、下载build源码
simba@simba-Vostro-3400:~/gdb_build$ git clone https://android.googlesource.com/toolchain/build.git
#坐等下载完毕,然后...
#编译 sysroot
simba@simba-Vostro-3400:~/neptune/build_src$ cd build/
simba@simba-Vostro-3400:~/gdb_build/build$ ./build-sysroot.sh $ANDROID_SRC/out/target/product/imx51_bbg/$HOME/gdb_build/sysroot
#注意此处sysroot的目标目录一定要使用绝对路径,否则sysroot不能正常生成,之后编译gdbserver时会报错。
4.修改编译脚本
#备份并修改build-gdbserver.sh
simba@simba-Vostro-3400:~/gdb_build/build$ cd ..
simba@simba-Vostro-3400:~/gdb_build$cp $ANDROID_SRC/ndk/build/tools/build-gdbserver.sh $ANDROID_SRC/ndk/build/tools/build-gdbserver.sh_back
simba@simba-Vostro-3400:~/gdb_build$gedit$ANDROID_SRC/ndk/build/tools/build-gdbserver.sh
#以下红字部分为添加内容,目的是注释掉部分代码
<<NOT_NEEDED
# Remove libthread_db to ensure we use exactly the one we want.
rm -f $BUILD_SYSROOT/usr/lib/libthread_db*
rm -f $BUILD_SYSROOT/usr/include/thread_db.h
if [ "$NOTHREADS" != "yes" ] ; then
# We're going to rebuild libthread_db.o from its source
# that is under sources/android/libthread_db and place its header
# and object file into the build sysroot.
LIBTHREAD_DB_DIR=$ANDROID_NDK_ROOT/sources/android/libthread_db/gdb-$GDB_VERSION
if [ ! -d "$LIBTHREAD_DB_DIR" ] ; then
dump "ERROR: Missing directory: $LIBTHREAD_DB_DIR"
exit 1
fi
# Small trick, to avoid calling ar, we store the single object file
# with an .a suffix. The linker will handle that seamlessly.
run cp $LIBTHREAD_DB_DIR/thread_db.h $BUILD_SYSROOT/usr/include/
run $TOOLCHAIN_PREFIX-gcc --sysroot=$BUILD_SYSROOT -o $BUILD_SYSROOT/usr/lib/libthread_db.a -c $LIBTHREAD_DB_DIR/libthread_db.c
if [ $? != 0 ] ; then
dump "ERROR: Could not compile libthread_db.c!"
exit 1
fi
fi
NOT_NEEDED
#备份并修改prebuilt-common.sh
simba@simba-Vostro-3400:~/gdb_build$ cp $ANDROID_SRC/ndk/build/tools/prebuilt-common.sh $ANDROID_SRC/ndk/build/tools/prebuilt-common.sh_back
simba@simba-Vostro-3400:~/gdb_build$ gedit $ANDROID_SRC/ndk/build/tools/prebuilt-common.sh
将
get_toolchain_install ()
{
echo "$1/toolchains/$TOOLCHAIN/prebuilt/$HOST_TAG"
}
修改为:
get_toolchain_install ()
{
echo "$1/prebuilt/$HOST_TAG/toolchain/$TOOLCHAIN"
}
5.编译gdbserver
simba@simba-Vostro-3400:~/gdb_build$ $ANDROID_SRC/ndk/build/tools/build-gdbserver.sh $HOME/gdb_build $ANDROID_SRC arm-eabi-4.4.3 --verbose --build-out=$HOME/gdb_build/install--gdb-version=7.1.x --sysroot=$HOME/gdb_build/sysroot
#注意此处一定要是用绝对路径指定sysroot的目录
6.目标文件位于~/gdb_build/install目录下
7.参考文章
分享到:
相关推荐
android2.3版本下编译成功的gdbserver,可以直接拷贝到真机上运行,版本未7.1。使用时要注意版本的问题
gdbserver,编译好的文件,直接放在uclinux上运行
动态调试工具,gdb 和gdbserver配套,直接通过windows上调试android上的程序。再也不用担心gdb和gdbserver不匹配的问题了
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机...
ubuntu 交叉编译工具gdb工具连接开发板gdbserver进行调试的方法,通过串口连接开发板,包括连接的命令等,但是不包括gdb常用的命令介绍
资源中包含gdb-8.1.tar.gz的源码+arm板gdb调试移植+编译好的可直接使用gdbserver可执行文件. arm板上对程序在线调试,一般使用的就是gdb+gdbserver。而我们的交叉编译工具链中,都带有gdb(`arm-linux-gnueabihf-gdb...
编译安装gdb+insight和gdbserver远程调试
At91sam9x25 交叉编译工具链 GCC4.9.2,内核版本2.6.39,glibc2.18,带GDB,gdbserver版本,可以远程调试
项目中使用的 自己编译出来的 下载进入板子后改名为gdbserver并chmod +x即可 只要在pc上安装mips-linux-gdb即可使用
Android 使用NDK自带的gdb+gdbserver进行so的动态调试
用gdb-7.11编译的gdbserver,静态链接,大端mips架构 ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=062b51edc22a5ae78fc1f31debbc534c6...
【摘要】:本文首先介绍了gdb+gdbserver相关的概念,然后介绍了其下载、编译、安装等过程;接着介绍了利用gdb+gdbserver调试应用程序的流程及实例等;最后分析了下gdb+gdbserver安装过程中的常见问题。 <br>...
arm v9 gdbserver(xilinux zynq7000) arm v9 gdbserver(xilinux zynq7000) 下载进入板子改个名为gdbserver并chmod +x就可以了
android自己安装所需要的二进制文件gdb/gdbserver以及绕过PIE机制的Linker,Linker来自看雪论坛,向原作者致敬。
mips gdbserver二进制文件
该压缩包是嵌入式linux下移植gdb和gdbserver调试工具源码包,并且最重要里面还有一份移植文档,该文档内容会手把手教你编译安装和使用gdb和gdbserver调试工具
gdbserver 支持x86 wayos调试
gdb、gdbserver、libc等动态库。用于海思平台gdb远程调试,编译器为arm-hisiv100nptl-linux-gcc。
实用技巧:Gdbserver远程调试的具体实现实用技巧:Gdbserver远程调试的具体实现
亲测在armv4l架构上运行没有问题 另外在带arm v9 cpu ip核上使用了