gdb7.10.1的交叉编译以及远程调试

引子:    因为程序使用了第三方提供的openssl库,该openssl库是在官方源码的基础上进行定制,使用3G AT命令来收发数据,现在需要升级openssl的库,但是没有该库的定制后的源码。那么要搞清楚定制支持3G AT命令的机制,一个思路是研究openssl的收发数据机制,另一个思路就是用GDB来调试现有程序,去跟踪openssl如何和3G AT进行交互。第一个思路,要么是openssl提供架构设计文档,openssl只提供API和对应数据结构的文档,大多数开源都是如此,要么就是走读openssl的源码,word天,openssl源码会让人读到哭。那么看第二个思路,就是用GDB去调试跟踪。坑爹的是现有程序只有一套第三方交叉工具链,但是没有提供GDB工具,需要自己编译。好吧,于是就有了这篇文档。

  1. 准备

    gdb-7.10.1.tar.gz

    第三方工具链

    cygwin 32(第三方工具链是基于cygwin 32工作的)

  2. 编译配置

    #export PATH=$PATH:/usr/local/arm/3.3.4/bin

    第三方的工具链的编译链接等工具的路径

    #./configure --host=arm-linux --prefix=/usr/local/arm-gdb CFLAGS=-I/usr/local/arm/3.3.4/arm-linux/sys-root/usr/include LDFLAGS="-L/usr/local/arm/3.3.4/arm-linux/sys-root/lib -L/usr/local/arm/3.3.4/arm-linux/sys-root/usr/lib"

    --host=arm-linux    指定目标gdb工具套件要运行的目标系统,这个同时也是工具立案编译器的前缀

    --prefix=/usr/local/arm-gdb 指明要安装路径,之后make install会将生成的东西安装到这个目录下

    CFLAGS=-I/usr/local/arm/3.3.4/arm-linux/sys-root/usr/include 指明交叉工具链的头文件路径

    LDFLAGS="-L/usr/local/arm/3.3.4/arm-linux/sys-root/lib -L/usr/local/arm/3.3.4/arm-linux/sys-root/usr/lib"    指明交叉工具链的库路径

    编译过程遇到一个问题:arm-linux-nat.c报告struct iovec结构不存在,所以iov的变量不知其size,打开arm-linux-nat.c,加了一条#include <sys/uio.h>就好了。

  3. 编译安装

    #make   编译链接,会比较久,没有细算,几十分钟。

    #make install   安装生成的工具到--prefix指定的目录

4.本地gdb的编译

要远程调试arm板子上的程序,还需要编译对应平台的本地gdb,说起来有点绕口,简单来讲就是:

#./configure --target=arm-linux

编译出来的GDB是cygwin下可以运行的PE32可执行程序,是可以调试arm平台代码的。

这个为了不和1-3点混淆,则另展开一份干净gdb7.10.1的代码,命名为gdb7.10.1_for_pc

然后进入该目录,用命令

#./configure --target=arm-linux --prefix=/usr/local/arm_pc

#make

#make install

之后会再--prefix下看到编译好的gdb

#ls /usr/local/arm-gdb_for_bu/bin/
     arm-linux-gdb.exe  arm-linux-run.exe

5.远程调试

将/usr/local/arm-gdb/bin/gdbserver拷贝到板子上,如/mnt/Nand2/gdbserver。然后转到要调试的程序所在的目录,比如要调试名字为test的程序,执行以下命令

#/mnt/Nand2/gdbserver 192.168.100.200:9527 test

192.168.100.200:9527是板子的IP和端口。

test是要调试程序名称

然后在打开cygwin,转到test程序以及源码所在的目录,

#/usr/local/ar5m_pc/bin/arm-linux-gdb.exe test

进入到gdb交互命令模式

>set sysroot /usr/local/arm/3.3.4/arm-linux-sys-root

指定交叉工具链的sysroot,这样gdb才能找到test程序对应c库的符号,才能调试,否则就不知道飞到哪里去了。

>target remote 192.168.100.200:9527

连接目标板的调试器gdbserver, 链接OK的话,目标板listen的gdbserver应会出现打印

Remote debugging from host 192.168.100.197
     192.168.100.197是cygwin所在机器的IP。

之后就可以在PC的cygwin窗口gdb的命令交互模式,展开调试。呜呼~~~~~~

写完了。。。。。。

时间: 2024-07-29 05:50:29

gdb7.10.1的交叉编译以及远程调试的相关文章

Android开发系列10 Cordova架构学习 Weinre远程调试技术

手机上的页面不像桌面开发这么方便调试.可以使用Weinre进行远程调试以方便开发.本文介绍windows下的安装与使用. 安装 使用npm安装,可以运行: npm install -g weinre 安装完路径可能是这样的: 输入命令 weinre 即可启动. 使用浏览器打开网址: http://localhost:8080 推荐使用Chrome. 如果有防火墙,要注意需要允许8080端口数据通行. 现在可以连接Cordova程序进行调试了.把下面代码放到index.html里. <script

使用gdbserver远程调试

转载:http://my.oschina.net/shelllife/blog/167914 gdbserver工具 先确定默认crosstool交叉编译器是否有自带gdbserver,如果有就不需要自行编译.一般都会带有对应的gdbserver工具,可以通过find命令查找确定: [email protected]:~/work/system$ which arm-none-linux-gnueabi-gcc /opt/arm-2009q3/bin/arm-none-linux-gnueabi

Windows下通过ARM目标板上的gdbserver进行远程调试的方法

因某种需要,要在Windows平台上进行程序开发,目标板是基于Micrel芯片(ARMv4t)做的,上面运行有Linux最小系统,只有最基本的命令,需要在Windows平台上交叉编译能在ARMv4t上运行的目标代码,并且还要能进行远程调试.基于这些需求,初步计划按以下步骤进行: 1.先在Windows平台上交叉编译一个简单的C语言程序,并上传到开发板上,能正常运行即可: 2.交叉编译gdbserver,并上传到开发板: 3.进行远程调试. 按上述计划,首先要找一个Windows环境下的交叉编译环

20150502 调试分析之 使用gdb远程调试ARM开发板

20150502 调试分析之 使用gdb远程调试ARM开发板 2015-05-02 Lover雪儿 今天我们要学习的是使用gdb和gdbserver来远程调试开发板程序. 下面是本人的一些具体步骤: 下载gdb-7.9.tar.gz地址: http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz 安装gdb tar -jxvf gdb-7.9.tar.bz2 ./configure -target=arm-none-linux-gnueabi --prefix=/hom

GDB远程调试(一)之DM8168下gdb远程调试环境的搭建

1.前言 gdb是较为流行和通用的linux环境调试工具,掌握它对于嵌入式开发工作来说非常必要,能够提高工作效率,快速发现和解决问题.最近有兴趣研究了下gdb使用,特总结如下以备以后查阅. 2.下载最新的gdb 下载地址:http://ftp.gnu.org/gnu/gdb/,选择目前最新的版本下载.我选择了gdb-7.7.tar.gz版本 3.编译gdb和gdbserver (1)解压到你的工作目录: [email protected]:~$ tar -xvf gdb-7.7.tar.gz (

gdbserver远程调试嵌入式linux应用程序方法

此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码,并用交叉编译器arm-linux-gcc编译好之后再下载到板子上运行.如果建立了远程调试(能够在PC机ubuntu中调试板子中的linux应用程序),这样对于开发程序是极其方便的. 以下是摘自网络上的一些方法.其中加入了自己所遇到的一些问题,并提出了解决方法. 1.首先建立nfs文件系统,让PC机

使用GDB进行嵌入式远程调试

PC主机:Ubuntu 10.4 目标板:TQ2440开发板,linux内核2.6.30 NOTE:为了使用gdb进行调试,强烈建议使用nfs服务,否则调试会非常麻烦. 使用nfs服务可以参考:S3C2440挂载NFS文件系统 1. 概述 所谓远程调试,就是开发板上建立一个gdb服务端,同时待调试的程序也位于开发板,然后在PC机上使用gdb发起远程连接来进行调试.也就是说,在PC端调试开发板上的程序.请注意,在PC端需要包含被调试程序的符号调试信息(symbolic debug informat

GDB + gdbserver 远程调试android native code

原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuTarget: Android ICS 1.将gdbserver放入设备. 确保系统有arm-*-gdb,及存在设备端将要运行的gdbserver,gdbserver可以由google ndk中获取,在ndk的如下目录可以找到这个文件: 点击(此处)折叠或打开 android-ndk-r8/toolc

Atitit web remote远程调试的原理attilax总结

Jvm是vm打开一个debug port,然后ide先连接..然后执行url,就会vm会与ide沟通.. Php的xdebug port 9000是在phpstorem打开的...如果执行url,也会启动debug..必须要预先连接ide和apache才可..使用phpstorm打开debug page即可,预先连接好.然后就xdebug就可以与ide打开的9000 debug port连接调试了.. 连接建立 对于有静态IP.单个开发者 使用Xdebug的远程调试,Xdebug作为一个嵌入到P