一、概述

可能我们都熟悉直接在发行版linux系统下调试系统,只需要在安装系统的时候包含了调试工具,直接可以根据gdb进行调试。但对于很多做嵌入式的来说,可能经常需要调试运行在开发板上的应用程序,下面就来说说。

先说一下我们的调试原理:首席会在开发板上运行一个gdbserver,通过gdbserver接收develop机器的命令,然后通过gdbserver控制开发板的程序运行。gdbserver就相当于开发板应用程序和develop机器之间的桥梁,一方面从develop机器上接收命令控制开发板的应用程序;另一方面,会向开发板报告程序的运行情况,如各种变量的值,方面开发人员调试和观察(这不就是我们调试的目的嘛)。在develop上要装有arm-none-linux-gnueabi-gdb(不一定是这个名字,是属于交叉编译工具链中的gdb,不是发行版linux自带的),用它在develop上启动应用程序,并和开发板联机,通过在develop上输入命令来调试开发板上运行的程序。

二、安装工具:arm-none-linux-gnueabi-和gdbserver

交叉编译器的名字是arm-none-linux-gnueabi-gcc(根据你自己的交叉编译工具,有的可能是arm-linux-gcc),下面会用到

1. 从下载gdb,解压,进到相关目录

2. 编译GDB

#cd gdb-7.2

#./configure --target=arm-none-linux-gnueabi --prefix=/usr/local/arm-gdb   // 上面提到的交叉编译器,就是用在这里,因为我们target上运行

// 的应用程序是用它编译出来的

#make

#make install           //生成在/usr/local/arm-gdb/bin下

把bin下面生成的arm-none-linux-gnueabi-gdb拷贝到交叉编译链目录中或修改环境变量把它的路径加进去,这样我们可以直接用这个命令

3.编译GDB Server

#cd ./gdb/gdbserver       // 即是目录gdb-7.2/gdb/gdbserver

#./configure --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi

#make CC=arm-none-linux-gnueabi-gcc     //编译用于目标机的stub程序  生成gdbserver是GDB客户端程序,在板子上运行。

之后在~/gdb/gdbserver文件夹下生成可执行文件gdbserver

然后将gdbserver拷贝到板子上的某个bin目录下即可。

三、调试步骤

201.123.116.65:5678代表开发板的ip是201.123.116.65,5678是任意给的端口

1.在开发板上:

[root@ATP2400 test-drv]# gdbserver 201.123.116.65:5678 test

Process server created; pid = 907

Listening on port 5678

注意:编译的test程序必须加了调试信息,即编译时加上“-g”

2.在develop上:

[root@ATP2400 test-drv]# arm-none-linux-gnueabi-gdb test

进入到gdb,然后

(gdb) set solib-absolute-prefix /nfsdir/atp2400/mini-rootfs-pgy-1808

(gdb) set solib-search-path /nfsdir/atp2400/mini-rootfs-pgy-1808/lib

(gdb) target remote 201.123.116.65:5678

Remote debugging using 201.123.116.65:5678

warning: Can not parse XML target description; XML support was disabled at compile time

Reading symbols from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3...(no debugging symbols found)...done.

Loaded symbols for /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3

0xb6fda7b0 in _start () from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3

解读:上面在gdb下面的操作如果直接执行target remote 201.123.116.65:5678系统会抱怨

说库不匹配,因为启动的gdb是arm-none-linux-gnueabi-gdb,是属于运行开发板程序的gdb,

所以需要用到的动态链接库也应该是arm的,而不是本地库,本地库是支持X86的。前两句就是

设置动态链接库的路径的,/nfsdir/atp2400/mini-rootfs-pgy-1808/是我做的开发板文件系统

的源文件

3.然后就可以直接进行调试了

(gdb) b main

Breakpoint 1 at 0x8698: file server.c, line 19.

(gdb) l

5#include

6#include

7#include

8

9#define SOCKET_PORT 7000

10#define BUF_SIZE 512

11int main(int argc, char *argv[])

12{

13int fd;

14struct sockaddr_in svraddr;

(gdb) c

Continuing.

Breakpoint 1, main (argc=1, argv=0xbefffe94) at server.c:19

19int n = 0;

(gdb)

由现象可以看到在通过develop调试开发板的应用程序时,开发板是不接受任何命令的,用串口终端进行输入会没有任何反应,

只有develop下的gdb退出后,开发板才可以正常接收命令

关于gdb调试命令,请网上查阅。

linux 远程调试文件夹,GDB远程调试开发板程序相关推荐

  1. 怎样访问远程服务器文件夹,访问远程服务器文件夹

    访问远程服务器文件夹 内容精选 换一换 /home/ubuntu为用户文件夹.此后,可以通过Windows的远程桌面访问到该华为鲲鹏920处理器所在服务器图形桌面,使用root帐号登录. 为加强对系统 ...

  2. 怎样访问远程服务器文件夹,访问远程服务器的共享文件夹

    访问远程服务器的共享文件夹 内容精选 换一换 FOTA升级作用:在官方更新新固件后,模组设备无需寄回给官方,而是通过远程FTP/HTTP进行OTA升级固件,以更新新固件版本,从而达到更新设备的功能/B ...

  3. 怎么复制远程服务器上的文件夹,Linux系统复制文件/文件夹到远程服务器

    从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...

  4. shell从服务器复制文件夹,关于shell:如何使用scp将文件夹从远程复制到本地?...

    如何使用scp将文件夹从远程复制到本地主机? 我使用ssh登录我的服务器.然后,我想把远程文件夹foo复制到本地/home/user/Desktop. 如何做到这一点? 操作的问题是,当ssh连接到远 ...

  5. PHPStorm 配置远程服务器文件夹在本地windows镜像,实现代码自动同步(类似于Samba架构文件同步功能)

    场景介绍: 这是一种类似samba架构,也和 filezilla+xshell 模式相类似的代码文件同步的模式,但是却更加优雅,也更加方便简洁. 环境介绍: 本地windows端:编辑器phpstor ...

  6. 远程服务器创建文件,ftp创建远程服务器文件夹

    ftp创建远程服务器文件夹 内容精选 换一换 在本地主机和Windows弹性云服务器上分别安装QQ.exe等工具进行数据传输.使用远程桌面连接mstsc方式进行数据传输.该方式不支持断点续传,可能存在 ...

  7. 有跳板机时,如何使用sshfs挂载远程服务器文件夹

    有跳板机时,如何使用sshfs挂载远程服务器文件夹 因为之前是在windows下是使用一些软件连接远程服务器,软件可以自己帮我们挂载,即使需要用跳板机只需要手动点点配置就好了.今天突然碰到这个问题,电 ...

  8. 第19部分- Linux x86 64位汇编GDB单步调试

    第19部分- Linux x86 64位汇编GDB单步调试 本篇我们使用gdb来调试上篇中的汇编代码. gdb调试 使用gdb进行调试. #gdb ./addsum_arg 设置参数: (gdb) s ...

  9. 如何使用 scp 将文件夹从远程复制到本地?

    问: 如何使用 scp 将文件夹从远程复制到本地主机? 我使用 ssh 登录到我的服务器. 然后,我想将远程文件夹 foo 复制到本地 /home/user/Desktop. 我如何实现这一目标? 答 ...

最新文章

  1. 安卓GreenDao框架一些进阶用法整理(转)
  2. Mysql分库分表(Mycat)
  3. CreateService / SC 创建自启动服务
  4. 80%的人都混淆的BI和报表之不同
  5. python中unique函数_正在计算unique()的返回值
  6. Java语言语法语义分析器设计与实现
  7. 仔细看看_仔细看看,您会发现需要改进的地方
  8. 【渝粤题库】陕西师范大学100141大学英语(三)作业 (专升本、高起本)
  9. CSS简介和CSS选择器
  10. PHP程序员40点陋习
  11. idea shell 使用linux_Linux 基础操作
  12. UploadBean实现文件上传(转)
  13. echarts3D使用时会遇到的问题(版本低)
  14. 种子文件多服务器,别再问我什么是 BT 种子了!一次性全告诉你
  15. 基于https的harbor部署与升级
  16. java在线ide_程序猿专用十大在线编译器(IDE)整理
  17. 肝细胞肝癌复发前后CD3高表达T淋巴细胞的变化
  18. 翻译: 巴菲特公式:睡觉比醒来更聪明
  19. Python 医学知识图谱问答系统(一),建立医学知识图谱,基于neo4j知识图谱的医学问答体系
  20. manjaro安装搜狗输入法(最简单,轻松三步)

热门文章

  1. 万用表怎么测量电池容量_万用表检测光电耦合器的常用技巧
  2. python实战——发邮件
  3. 终极解密输入网址按回车到底发生了什么?
  4. 玩玩机器学习4——TensorFlow基础之激活函数
  5. linux django搭建网站,Linux下搭建Django站点一
  6. 在电脑搭建oracle服务器端,oracle 服务器端搭建(C#开发环境)
  7. 自动提示_EXCEL2013版突然打不开,自动修复提示1907错误
  8. python 白化_Python新疆某气候要素IDW(反距离权重)插值
  9. usb连接不上 艾德克斯电源_艾德克斯HT3150联机和IT6720校准联机记
  10. java如何解析cron成可视化_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...