gdb交叉调试环境的搭建和基本使用 一、在PC端编译安装arm-linux-gdb 1、安装必要的软件包 $sudo apt-get install texinfo libncurses5-dev m4 flex bison 2、创建arm-gdb的安装目录,解压、配置、编译、安装gdb源码 $sudo mkdir /opt/arm-gdb $tar xvf gdb-7.8.1.tar.gz $cd gdb-7.8.1 $./configure --target=arm-linux --prefix=/opt/arm-gdb $make $sudo make install 安装成功时会在/opt/arm-gdb/bin/下生成arm-linux-gdb可执行文件。 3、为arm-linux-gdb添加环境变量 使用vi或vim等编辑器打开/etc/profile文件 $sudo vim /etc/profile 在文件的末尾添加如下内容: export PATH=/opt/arm-gdb/bin:$PATH 保存退出后在终端上执行如下命令: $source /etc/profile 二、在PC端编译gdbserver 进入在上一步完成arm-linux-gdb编译安装的gdb-7.8.1目录内: $cd gdb-7.8.1 $cd gdb/gdbserver $./configure --target=arm-linux --host=arm-cortex_a9-linux-gnueabi $make 编译成功会在此目录下生成gdbserver文件,这个文件会在下一步中被拷贝到nfs共享目录下,最终要在开发板上运行。 三、在Ubuntu主机上创建共享文件夹到ARM开发板 确保PC和开发板在同一个局域网内,确保自己要共享的PC上的文件夹以及所有文件都是777权限,关闭PC端防火墙。 在本手册测试环境中,以PC端ip:192.168.1.160,开发板ip:192.168.1.161的网络环境为例。 1、安装NFS协议: $sudo apt-get install portmap $sudo apt-get install nfs-kernel-server 2、创建PC上需要共享的目录: $sudo mkdir /share $sudo chmod -R a+wxr /share 3、使用vi或vim等编辑器打开/etc/exports文件: $vim /etc/exports 在exports文件的末尾添加如下内容后保存退出: /share *(rw,sync,no_root_squash) 4、重新启动NFS服务 $sudo /etc/init.d/nfs-kernel-server restart 5、在PC上验证是否可以共享 $sudo mount -t nfs 192.168.1.160:/share /mnt 如果共享成功,可在/mnt下查看到/share下的文件。 6、开发板挂载PC端共享目录 在开发板的终端上执行如下命令: #mount -t nfs -o nolock 192.168.1.160:/share /mnt 如果共享成功,可在开发板的/mnt下查看到PC端上/share内的文件,至此,创建共享目录的步骤完成并挂载成功。 7、在PC端,把在第二步中编译生成的gdbserver文件拷贝到/share目录下: $sudo cp gdbserver /share/ 四、使用arm-linux-gdb和gdbserver交叉调试 首先交叉编译需要调试的程序源文件,在此以gdbtest.c为例,注意在编译时需加上-g选项: $arm-cortex_a9-linux-gnueabi-gcc -g gdbtest.c -o gdbtest 编译生成gdbtest可执行文件,将此文件拷贝到PC端的/share/目录下,我们需要对它进行gdb交叉调试。 在开发板的终端执行: #cd /mnt #./gdbserver 192.168.1.160:5000 gdbtest 其中192.168.1.160为PC端IP地址,5000为通信端口,gdbtest为要调试的程序,用户可通过实际调试环境调整。 在PC端执行: $cd /share $arm-linux-gdb gdbtest 此时会进入到gdb调试环境,在此环境中执行如下命令: (gdb)target remote 192.168.1.161:5000 其中192.168.1.161为开发板IP地址,5000为开发板执行gdbserver时指定的通信端口,两端指定的通信端口号要保持一致。 在开发板终端可以看到应答信息为Remote debugging from host 192.168.1.160 至此,就可以在PC端上执行gdb调试命令来交叉调试程序了,调试方法基本与主机gdb调试方法一致,但需要注意的是不使用run来执行程序,因为执行完target remote 192.168.1.161:5000命令后,目标板上程序已经在运行,直接用continue命令即可运行程序。 五、gdb在线调试的基本命令 symbol-file 装入符号库文件,可以是用-g选项编译的可执行文件 list 列出程序源文件,简化命令为l break 设置断点,例如b 10,即在源程序的第10行加入断点;b func,即在源程序的func函数加入断点,简化命令为b continue 使程序继续执行,直到下一个中断点或程序结束,简化命令为c print 可打印出程序中某个变量的值,例如在程序中定义了int i,则print i会打印出程序执行到当前时变量i的值,简化命令为p next 程序执行到断点时中断执行,可以用next命令进行单步执行,简化命令为n step 程序执行到断点时终端执行,可以用step命令进行单步执行进某一函数,简化命令为s quit 退出gdb调试环境,简化命令为q |
|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )
GMT+8, 2024-12-22 22:54
Powered by Discuz! X3.4
© 2001-2013 Comsenz Inc.