嵌入式Linux--配置gdb调试环境

嵌入式GDB调试环境搭建与使用 1. GDB 简介 阅读详情

gdb交叉调试类似于网络浏览器,本地PC为客户端,arm开发板为服务器端,双方都要统一编译工具链,版本最好保持一致。
(百度百科)一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

一、下载源码

http://ftp.gnu.org/gnu/gdb/
新的版本对环境的要求要高点,如果出错了可以尝试更换旧点的版本,我使用的版本是 gdb-7.8.1.tar.gz。

二、获取arm-linux-gdb(pc)

arm-linux-gdb属于调试程序,主机可以通过执行该程序打开arm可执行文件。一开始照着网上的教程来操作,理想情况.configure、make、make install三步到位,实际情况是参数换了好几组,make始终会报error。他们的思路是通过gdb源码配置->编译->生成arm-linux-gdb,我失败的原因可能是交叉编译工具链不适合此操作,当我查看工具链的时候,发现工具链本身自带一个arm-linux-gdb程序!那我就没必要再去自己编译生成一个了。如果工具链没有这个程序再去考虑编译安装,可以参考这篇文章。
在这里插入图片描述

三、获取gdbserver(arm)

gdbserver运行在arm开发板中,生成步骤:

cd gdb-7.8.1/gdb/gdbserver/
./configure  --target=arm-linux --host=arm-linux
make CC=arm-linux-gcc

参数含义:

--target 指定了目标机交叉编译器前缀
--host   指定了编译后的程序需要在哪里运行
CC=arm-linux-gcc 用来指定交叉编译工具为arm-linux-gcc,需要根据你自己的来指定。

这个过程一般不会出错,执行完命令后会在该目录下生成一个gdbserver可执行文件,将该文件拷贝到开发板的/usr/bin目录下,方便调用。这里需要注意的是运行gdbserver还需要libthread_db库,若你自己做的文件系统内没有这个库的话需要将本地交叉编译工具中的libthread_db*拷贝到开发板的/usr/lib中去。
在这里插入图片描述

四、使用方法

4.1 编译程序

hello.c

#include <stdio.h>

int main()
{
        int i = 1;

        while (i++)
        {
                printf("num is : %d \n", i); 
        }
    
        return 0;
}

Makefile

all:
        arm-linux-gcc -g hello.c -o hello

clean:
        rm hello

arm-linux-gcc -g用于编译出含有gdb调试信息的可执行文件。

4.2 ARM端打开gdbserver

ARM端执行如下内容,gdbserver 本地IP+端口号+可执行文件

gdbserver 192.168.40.178:1111 hello

4.3 PC端连接gdbserver

PC端执行:

arm-linux-gdb ./hello
target remote 192.168.40.178:1111

pc端连接之后,在arm板子这边可以看到远程连接信息。

4.4 gdb调试

通过简单的设置断点、运行来观察信息,可以看到已经能够gdb调试了。

五、其他

https://gdbgui.com/installation.html

gdbgui -g arm-linux-gdb test(test为要调试的可执行程序)

参考文章:

【ARM Linux 系统稳定性分析入门及渐进11 -- GDB( print 和 p 的使用| @ 和 ::的使用|ptype|{<type>} <addr> )】 在GDB中,你可以使用的形式来将一个地址转换为特定的类型。这在处理低级别的内存操作时非常有用。在这个例子中,表示将地址0x40063c转换为float*类型的指针,然后运算符获取这个指针指向的值。结果是,这个地址上存储的浮点数3.14159被正确地读取出来。注意,这种形式对于处理复杂的数据类型也非常有用,例如结构体或类。你可以使用这种形式来获取存储在特定地址的数据的成员。$2 = 42在这个例子中,地址0x40063c被转换为MyStruct*类型的指针,然后使用->运算符来获取a成员的值。 阅读详情

相关推荐

避坑指南:Spring3集成OpenAPI时泛型响应失效的3种解决方案

本文深入探讨了Spring3集成OpenAPI时泛型响应失效的问题,提供了三种实用解决方案:移除@Schema注解、使用@ArraySchema包装泛型以及自定义Schema处理器。针对不同项目规模,详细分析了各方案的适用场景、优缺点及性能影响,帮助开发者高效生成准确的接口文档,提升前后端协作效率。

weixin_30839881的博客 100

Linux工具之gdb(含移植到arm-linux系统)

Linux工具之gdb(含移植到arm-linux系统)

NRWHF的博客 4269

注册电气工程师详细教材

注册电气工程师详细教材

qq_40844444的博客 4256

交叉编译嵌入式linux平台的gdb工具

pc机系统:ubuntu系统目标板的编译工具链:arm-openwrt-linux-gcc嵌入式Linux目标板:R328。

1678

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5525

Linux下GDB简明教程(包括GUI模式)

我们在linux下调试程序时,一般都会用到gdb,本文主要介绍一下gdb常用的操作以及TUI模式的使用方式。 一 常用操作 假设我们有段程序叫main.c,代码如下, #include &amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;gt; typedef struct { char name[8]; int age; int birthYear; } student; int func(int dat

爱就是是恒久忍耐的专栏 6828

实验2 存储器设计与实现【计算机组成原理】

实验2 存储器设计与实现【计算机组成原理】

小心星的博客 2399

嵌入式Linux(三):GDB程序调试

搞嵌入式Linux应用开发,GDB调试是必备技能,这里,简单记录一下GDB一些常用的调试方式。

weixin_45259896的博客 1367

【网络安全】浅谈数据库攻击复现及相关安全优化

4、准备数据库服务器为了安全正式环境应该把数据库单独放一台服务器,只允许让应用服务器 IP 来访问数据库服务器,通过独立两者,就算其中一台发生问题,另一台也是好的,进一步降低了危险性。5、定时备份数据库开发定时备份功能,可以使用 Crontab,或者其他框架,设定周期备份数据,哪怕是数据丢失或被删除也可以快速恢复。

2401_88545587的博客 222

【Jenkins】Jenkins :首次登录直接使用 admin 账户

目录 一、使用admin账户 二、修改admin用户密码 三、管理视图 一、使用admin账户 安装时,自定义安装,选择必要的插件安装,设置Jenkins的URL为: http://本机或服务器IP:8080 然后在创建第一个管理者界面,直接选择:使用admin 二、修改admin用户密码 进入:系统管理——管理用户——选中用户——点击设置图标——修改密码: 三、...

顾三殇 —— 博客空间(软件测试) 1万+

嵌入式linux开发板+vscode,配置gdb调试环境

如果开发板本身没有自带gdb和gdb server,那么就需要上网进行下载。因此总的来说分为两步:step1 连接网络。

qq_44157835的博客 1631

YOLOv11改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov11精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 1823

嵌入式Linux驱动开发环境深度配置:从内核树构建到GDB调试

嵌入式Linux驱动开发环境深度配置的关键环节包括内核树构建与GDB调试。内核树构建涉及获取内核源码、配置Makefile、选择配置方式(makemenuconfig等)、编译内核及安装模块等步骤,需要注意目标平台适配和依赖库安装。GDB调试需要安装调试工具并移植GDBserver到开发板,掌握break、continue、step等核心调试命令,通过调试案例可有效定位驱动问题。开发过程中可能遇到内核配置错误、调试符号缺失等问题,需针对性解决。随着物联网等技术的发展,嵌入式驱动开发工具将趋向自动化与智能化。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 815

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux下交叉编译gdb和gdbserver

   平台:tq2440  GCC:  gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176)    这里过程中参考了下面两篇博文: http://blog.youkuaiyun.com/hejianhua/article/details/7254836 http://blog.youkuaiyun.com/fly_qj/article/details/827255...

weixin_33881041的博客 295

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

嵌入式Linux系统开发板搭建GDB调试环境

嵌入式Linux系统开发板搭建GDB调试环境

jwpython的博客 1353

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一文掌握vscode远程gdb调试

0 背景 最近在同事的安利下,尝试了用 vscode 做 gdb 调试,用完之后,“真香”。 话不多说,本文要实现的是:在 windows 端远程调试 linux 服务器和 arm 嵌入式设备上的 c++ 代码,对 gdb 调试的配置及使用进行一个整理 1 远程连接 首先需要实现远程连接服务器,在插件库中搜索 “remote-ssh”,双击下载安装即可(下图中我已安装好),安装好之后在侧边栏出现远程资源管理器 点击 + 号,在弹出的命令窗口中输入 ssh 登陆指令,按照提示,输入密码并确认,即

ZONGXP的博客 2万+

gdb和gdbserver的安装和调试

gdb是Linux环境下的代码调试工具,其安装步骤如下:安装step1:首先检查系统中有没有安装过,有的话用一下命令卸载gdb旧版本step2:在网址:http://ftp.gnu.org/gnu/gdb下载gdb源码包(这里楼主选的是8.0.1版本);或者直接在linux系统中用wget命令下载:wget http://ftp.gnu.org/gnu/gdb/gdb-8.0.1.tar.gz ...

北极洲的博客 3779

gdb+gdbserver远程调试环境搭建及调试

远程调试(即gdb+gdbserver)环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。

m0_56121792的博客 4270

GDB 在arm开发板上的远程调试(转载)

转载自:http://blog.sina.com.cn/s/blog_640531380100zvle.html   嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。 一、编译安装gdb+gdbserver 这

kaloha3的专栏 1021

gdb+gdbserver调试arm-linux程序

引用:http://www.xxlinux.com/linux/article/accidence/install/20070531/8639.html 我的环境: Fedora 14 虚拟机 编译器:arm-linux-gcc-4.3.2 开发板:TQ2440 嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用ar

u010068275的专栏 519

嵌入式Linux的GDB调试环境建立

原文来源:http://www.embeddedlinux.org.cn/html/jishuzixun/201404/07-2831.html?bsh_bid=383072872

牧羊人zqh 1136

linux上用gdb调试文件夹,嵌入式Linux的GDB调试环境建立

嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。这样,应用程序在嵌入式目标系统上运行,而gdb调试在Host端,所以要采用远程调试(remote)的方法。一、建立安装gdb组件从ftp://ftp.gnu.org/gnu/gdb上下载gdb套件,我下载的是gdb-5.2.1.tar.gz...

weixin_33592736的博客 311

CentOS 建立嵌入式开发环境

一、安装 minicom yum install minicom /dev/ttyS0 /dev/ttyUSB0 二、安装 NFS - (CentOS 配置 NFS) 三、安装 tftp 四、配置 arm-linux-gcc/gdb 下载 arm-linux-gcc-4.4.3.tar.gz tar -xzvf arm-linux-gcc-4.4.3.tar.gz mkdir

RobertBaker的专栏 3311

海思GDB调试

1.下载gdb源码 嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linuxgdb,Target Board端使用gdbserver。这样,应用程序在嵌入式目标系统上运行,而gdb调试在Host端,所以要采用远程调试(remote)的方法。进行GDB调试,目标系统必须包括gdbserver程序(在主机上正对硬件平台编译成功后下载到.........

kx453653102的专栏 4988
上一篇: 一步步完善rootfs:4.配置动态链接库
下一篇: 嵌入式Linux-Eclipse下gdb调试arm开发板
奔向星辰花海
博客等级 码龄10年 113粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值