linux 远程调试文件夹,GDB远程调试开发板程序

一、概述

可能我们都熟悉直接在发行版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调试命令,请网上查阅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux必备工具,Linux装机必备工具

分类 名称 类比 说明压缩工具 RAR for Linux WinRAR Linux中压缩解压RAR格式文件的工具联络聊天 EVA QQ 一个界面、使用 类似QQ的聊天工具。MP3 播放 XMMS WinAmp Linux中MP3播放器下载工具 Downloader4X FlashGet Linux中的多线程下载利器流媒体播放 RealPlayer 10 RealPlaye…

hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

1.源码 java1.7 hashMap 底层实现是数组链表 java1.8 对上面进行优化 数组链表红黑树 2.hashmap 是怎么保存数据的。 在hashmap 中有这样一个结构 Node implenets Map.entity{hashkeyvaluenext} 当我们向hashMap 中放入数据时,其实就是一个 Enity{keyvaue}在存之…

linux时间跳变影响,MONGO 集群 修改linux主机时间后的影响

生产环境是一主一从一仲裁3分片的集群,现在发现其中一个节点比当前时间大了好几天,后使用NTP将时间往回调整副本集上。原来时间是5月3日,当前是4月26日,对此进行了调整。[rootcwdtest1 bin]# dateFri May 3 13:20:31 CST 2019[ro…

Java容器解析——HashMap

前言 HashMap是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 1 定义 public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {}由HashMap定义可以看出 1&#xff09; HashMap<K,V>表示…

linux教程第五版第三章课后答案,linux 第三章 章习题.doc

填空题Linux_____可以理解为运行在_____之上&#xff0c;回避直接操作_____和配置文件的应用程序。在Linux中常见的两种图形环境是_____和______。在Linux中的配置文件为____和_____。在Fedor8.0中可以通过____窗口进行主题设置。在“自定义主题”对话框中可以对“控件”、“颜…

xp下添加linux启动项,grub.cfg--XP+ Ubuntu10.04双系统安装后无XP启动项

问题描述&#xff1a;Ubuntu 10.04发布了&#xff0c;随即裸机安装了Windows XP &#xff0c;然后用U盘启动盘安装了Ubuntu 10.04,安装速度飞快(不到10分钟吧)&#xff0c;但是装上后发现在grub启动项里没有XP&#xff0c;郁闷了&#xff0c;花了几分钟终于解决了&#xff0c;呵…

HashMap 源码详细分析(JDK1.8)

1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap。HashMap 最早出现在 JDK 1.2中&#xff0c;底层基于散列算法实现。HashMap 允许 null 键和 null 值&#xff0c;在计算哈键的哈希值时&#xff0c;null 键哈希值为 0。HashMap 并不保证键值对的顺序&…

linux错误码61,Linux编程中的错误码列表

有时可以知道错误的数值&#xff0c;但是如果不知道对应于那个宏定义&#xff0c;也很难知道这个错误描述的是什么。我平时这两种方法来确定&#xff1a;在内核源码中搜索和查看头文件。 在内核源码中搜索一般都可以搜到&#xff0c;而且使用source insight的话也很方便&#x…

linux无限刷屏代码,linux下如何实现简单刷屏

今天为了测试我的LCD有没有坏点写了一个简单的刷屏程序&#xff0c;效果还不错&#xff0c;分析给大家。代码如下&#xff1a;#include #include #include #include #include #include #include #include int main(int argc,char *argv[]){int fbfd 0;struct fb_var_screeninf…

mvc:annotation-driven 注解的作用

1.自动注册映射处理器和适配器 这是该注解的主要功能&#xff0c;添加< mvc:annotation-driven/>注解后&#xff0c;容器中会<自动注册HandlerMapping与HandlerAdapter 两个bean。省去手动注册HandlerMapping和HandlerAdapter的步骤。 当配置了< mvc:annotation-…

linux主机熵值过小,tomcat在linux启动应用慢解决方式

问题&#xff1a;o.a.c.util.SessionIdGeneratorBase - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [2,741] milliseconds原因&#xff1a;拿Tomcat /dev/random做关键词&#xff0c;一堆详细说明。建议看wiki。https://www.cnblogs.…

@Autowired注解能用在static属性吗?autowired注入static属性上为null

Autowired注解能用在static属性吗&#xff1f; 答案是否定的&#xff0c;我们来测试下&#xff1a; 日志信息已经很明确了&#xff0c;表示static不能被Autowired进行复制。为什么呢&#xff1f;我们现在就来一起了解其原因。 首先将我们的测试环境搭建好&#xff0c; Use…

linux下用c语言写黄金矿工,C语言写的黄金矿工O(∩_∩)O---初稿,能玩了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼int main(void){initgr();go();getch();closegr();return 0;}void youxiye() /* 游戏页 */{setfillstyle(SOLID_FILL,15);bar(0,0,639,49);setfillstyle(SOLID_FILL,6);bar(0,49,639,349);setcolor(BLUE);line(0,49,638,49);setc…

Swagger介绍及使用

导语&#xff1a; 相信无论是前端还是后端开发&#xff0c;都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力&#xff0c;经常来不及更新。其实无论是前端调用后端&#xff0c;还是后端调用后端&…

linux 安装libcurl4-gnutls-dev,curl / curl.h,libcurl,libcurl4-openssl-dev,libcurl4-nss-dev库之间的区别?...

我有以下curl标题,我仍然可以安装上面提到的libcurl4包 –kafkaMetamorphosis:~$ll /usr/include/curl/total 200drwxr-xr-x 2 root root 4096 Jan 16 13:29 ./drwxr-xr-x 51 root root 20480 Jan 16 13:29 ../-rw-r--r-- 1 root root 7303 Dec 18 01:11 curlbuild.h-rw-r--r--…

c语言输入四个成绩求最高分最低分,数组实现学生成绩录入、求最高分、最低分、平均分和排序...

/*使用数组实现10名学生的成绩录入&#xff0c;并输出这10名学生中成绩的最高分最低分平均分按照分数从大到小排序思考&#xff1a;如何实现从小到大排序&#xff1f;如果学院有5个班&#xff0c;每个班30人&#xff0c;如何处理&#xff1f;求所有成绩中的最高分是哪个班的&am…

c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc

C语言程序课程设计宿舍管理软件.doc课程设计(论文)题 目 名 称 宿舍管理软件课 程 名 称 C语言程序课程设计学 生 姓 名学 号系 、专 业 信息工程系、信息大类指 导 教 师 黄 同 成目 录1 前言2 需求分析62.1要求62.2任务2.3运行环境2.4开发工具3 概要设计与详细设计73.1设计原…

接口文档生成工具Swagger2的使用

一、什么是Swagger Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保…

Netty详解

一&#xff0e;Netty介绍 1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架&#xff0c;用以快速开发高性能、高可靠性的网络 IO 程序,是目前最流行的 NIO 框架&#xff0c;Netty 在互联网领域、大数据分布式计算…

有没有检查c语言编译错误的软件,求大佬解答,为什么这个程序编译软件检查不出错误...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include /* malloc()等 */#include#include#include /* exit() */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status; /* Status是函数的类型,其值是函数结果状态代码&…