Linux-笔记 嵌入式gdb远程调试

目录

前言

实现

        1、内核配置

        2、GDB移植

        3、准备调试程序

        4、开始调试


前言

        gdb调试器是基于命令行的GNU项目调试器,通过gdb工具我们可以实现许多调试手段,同时gdb支持多种语言,兼容性很强。 

        在桌面 Linux 系统(如 Ubuntu、CentOS 等)上,我们通常可以直接运行 gdb 来调试程序。然而,在嵌入式系统中,由于芯片性能较弱,直接运行 gdb 不太现实(除非是性能较强的嵌入式芯片)。因此,我们通常在 PC 端运行 gdb 工具,源码也在 PC 端,而对应的可执行文件则放在开发板上运行。为了实现这一点,我们需要在开发板上运行gdbserver,通过网络与 PC 端的 gdb 进行通信。因此,要在 PC 上通过 gdb 调试嵌入式程序,需要两个工具:gdb 和 gdbserver,其中 gdb 在 PC 上运行,gdbserver 则需要移植到开发板上运行。

        一般的交叉编译器已经自带了GDB工具,主要为:gdb与gdbserver。在交叉编译器安装目录的bin目录内就有这两个工具。需要注意的是,不同的交叉编译工具链编译的可执行文件是不一样的,要注意开发平台上的文件系统编译使用的是什么交叉编译工具链,不然在执行gdbserver的时候会一直报错说找不到文件以及“During startup program exited with code 127”的报错信息。

实现

平台:T113

服务器:Ubuntu 16.04

交叉编译器:gcc-arm-linux-gnueabi

         1、内核配置
Kernel hacking  --->[*] Kernel debugging[*] KGDB: kernel debugger[*] Compile the kernel with debug info[*] KGDB: use kgdb over the serial console

        2、GDB移植

        进入交叉编译器安装目录的bin目录内,可以看到里面自带了gdbserver工具,将其放置到开发平台的根文件系统的/usr/bin目录即可。

        3、准备调试程序

        简单编写一个应用程序,使用交叉编译器编译成可执行文件,记得要加上“-g”,表示编译的时候加上调试信息,编译后使用scp传输到开发平台上。

#include <stdio.h>
#include <unistd.h>int main(int argc, char *argv[])
{unsigned int times = 0;for (int i=0; i<5; i++) {printf("runing times:%d\r\n", times);times++;sleep(1);}
}

                        

        4、在开发平台输入命令开启gdbserver等待PC端连接

gdbserver 192.168.31.54:2001 gdbtest
·gdbserver 工具
·192.168.31.54 PC端IP
·2001 端口 随便整一个
·gdbtest 应用程序

        

        如果输入后报错说找不到文件或者报错“During startup program exited with code 127”那就可能是交叉编译器不对,编译出来的文件不可执行,这是本人遇到的情况。

        5、PC端运行gdb工具进行调试,运行后就会如下图等待我们输入命令。

./arm-linux-gnueabi-gdb  /<具体路径>/gdbtest

        6、连接到开发平台,输入命令连接

//连接到开发板上
target remote 192.168.31.28:2001 
·192.168.31.28 开发板IP
·2001  端口

        看看开发板的情况,可以看到已经连接上了,接下来就可以进行调试了。

          

   4、开始调试

        在调试前先了解一下gdb的命令

命令作用
        l列出所有程序源码
        b设置断点
        c运行到断点处
        s单步运行(会运行到函数里面)
        n单步运行(不会进函数里)
        p打印某个变量值
        q退出gdb调试界面,运行后开发板上的gdbserver也会停止

        1)列出程序源码

        

        2)设置断点到main函数

        ​​​​​​​        

        3)运行程序,遇到断点会停下,可以看到停在了main起始位置

        

        4)单步运行(进函数内),运行四次

        ​​​​​​​

        5)打印变量值,可以看到已经=1了,因为我们运行过一次完整的循环了

        ​​​​​​​ ​    

        6)自动执行程序,输入命令c,可以看到运行结束了,同时开发板也会打印出调试信息。

        ​​​​​​​        

        ​​​​​​​  ​​​​​​​

        7)PC端退出gdb调试

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

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

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

相关文章

【Java】微博系统设计:怎么应对热点事件的突发访问压力?

一、问题解析 微博&#xff08;microblog&#xff09;是一种允许用户即时更新简短文本&#xff08;比如140个字符&#xff09;&#xff0c;并可以公开发布的微型博客形式。今天我们就来开发一个面向全球用户、可以支持10亿级用户体量的微博系统&#xff0c;系统名称为“Weitte…

2024连云港等保测评机构看这里!

2024连云港等保测评机构看这里&#xff01; 目前连云港暂未有具有等保资质的机构。因此连云港企业可以就近选择江苏省内等保测评机构&#xff0c;或者在网上寻找合适的机构。 连云港城市简单介绍 连云港——江苏省辖地级市&#xff0c;地处沿海中部&#xff0c;东濒黄海&…

访问网站时IP被屏蔽是什么原因?

在互联网使用中&#xff0c;有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象&#xff0c;而导致这种情况的原因多种多样&#xff0c;包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因&#xff0c;同时&#xff0c;…

编译VTK静态库

编译VTK静态库遇到问题 vtkCommonCore-9.3d.lib(vtkSMPToolsAPI.obj) : error LNK2019: unresolved external symbol "public: bool __cdecl vtk::detail::smp::vtkSMPToolsImpl<1>::IsParallelScope(void)" (?IsParallelScope?$vtkSMPToolsImpl$00smpdetai…

JVM专题七:JVM垃圾回收机制

JVM专题六&#xff1a;JVM的内存模型中&#xff0c;我们介绍了JVM内存主要分哪些区域&#xff0c;这些区域分别是干什么的&#xff0c;同时也举了个例子&#xff0c;在运行过程种各个区域数据是怎样流转的。细心的小伙伴可能发现一个问题&#xff0c;在介绍完方法弹栈以后就没有…

【仿真建模-anylogic】Scale解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-27 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 应用场景 Scale是比例尺&#xff0c;用于长度单位和像素之间的换算&#xff0c;anylogic默认为每个agent生成一个scale&#xff0c;…

Navicat 外网连接 mysql (1、通过SSH方式内网访问 2、对外开放3306端口)

1、通过SSH方式内网访问 直接常规方式使用IP、账号密码连接&#xff0c;失败 SSH方式&#xff1a; 常规 选项卡中&#xff1a;localhost录入数据库账号密码 SSH 选项卡中&#xff1a;勾选使用SSH&#xff0c;输入服务器IP、账号、密码 如果出现该错误&#xff0c;可能是服务器…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口&#xff0c;电商企业可以实现商品同步功能&#xff1a; 商品信息同步&#xff1a;通过接口可以实时同步主流电商平台上的商品信息&#xff0c;包括商品标题、价格、库存、销量等数据&#xff0c;确保企业在自…

GPU_Gems-物理模型的水模拟

创建一个多网格的平面 void GraphicsWindowBase::RenderPlane() {constexpr int width 150;constexpr int depth 150;constexpr int vertNum width * depth;float length 60.f;if (quadVAO 0){float planeVert[vertNum * 5];float offsetX length / (width - 1.f);float…

【精选】数据治理项目实施(合集)05——解码“数据架构”,数据架构包含哪些内容?

上一篇讲到了数据治理项目的前期调研工作&#xff0c;继数据调研工作完成之后&#xff0c;就要开始关于治理工作的各项方案设计&#xff0c;整体方案设计包括数据架构、元数据、主数据、数据质量、数据安全、指标标签体系、数据生命周期管理和管理评价等内容。这一篇重点讲一下…

聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?

背景介绍 UDF来源于Hive&#xff0c;Hive可以允许用户编写自己定义的函数UDF&#xff0c;然后在查询中进行使用。星环Inceptor中的UDF开发规范与Hive相同&#xff0c;目前有3种UDF&#xff1a; A. UDF--以单个数据行为参数&#xff0c;输出单个数据行&#xff1b; UDF&#…

为什么说展厅数字人是展览未来的趋势?

展厅数字人是利用数字化、智能化和网络化等信息技术手段提升展厅展览服务和游览体验的全新载体。随着人工智能和虚拟现实技术的应用发展&#xff0c;展厅数字人已成为展厅展览转型升级的重要趋势。 展厅数字人凭借其创新性、强可塑性&#xff0c;成为展厅新名片&#xff0c;为各…

趣测系统搭建APP源码开发,娱乐丰富生活的选择!

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 趣测系统提供了一个集合多种有趣测试的平台&#xff0c;如心理测试和星座测试等&#xff0c;这些测试内容富有趣味性和娱乐性&#xff0c;能够帮助大众在忙碌的生活中找到放松和娱乐的时刻…

Vite 动态导入警告问题解决方案

如上图我要实现从后台获取权限菜单并动态导入进行渲染 但由于 vite 暂时不支持这种导入方式 图中也给出了提示 本人也是这么去做了 但并没什么卵用 后来参考了 vite 的 import.meta.glob 这种方式 我在处理菜单权限控制的菜单里进行了如下操作&#xff1a; …

Hyperf 在 NginxProxyManager 如何配置 websocket?

新建代理 填写域名等服务信息&#xff0c;选择支持WebSockets。 创建 SSL 编写nginx配置 location /message.io{proxy_pass http://<你的ip>:<对应端口号>;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upg…

会计报表分析

目录 一. 会计报表的种类 \quad 一. 会计报表的种类 \quad 反应财务状况的是资产负债表 反应经营成果的是利润表 有时间点的就是静态表 动态表就是有一个区间的, 比如一年, 一个季度等

学习笔记——动态路由——RIP(RIP路由汇总介绍)

四、RIP路由汇总介绍 当网络中路由器的路由条目非常多时&#xff0c;可以通过路由汇总&#xff08;又称路由汇聚或路由聚合&#xff09;来减少路由条目数&#xff0c;加快路由收敛时间和增强网络稳定性。 路由汇总的原理是&#xff0c;同一个自然网段内的不同子网的路由在向外…

Django 如何使用视图动态输出 CSV 以及 PDF

Django 如何使用视图动态输出 CSV 以及 PDF 这一篇我们需要用到 python 的 csv 和 reportLab 库&#xff0c;通过django视图来定义输出我们需要的 csv 或者 pdf 文件。 csv文件 打开我们的视图文件 testsite/members/views.py 。新增一个视图方法&#xff1a; import csv …

活用变量,让Postman的使用飞起来

在 Postman 中使用变量是一种非常强大的功能&#xff0c;它可以极大地增强 API 测试和开发的灵活性和效率。 Postman变量的类型 变量在 Postman 中可以在多个层次设置和使用&#xff0c;包括 全局变量环境变量集合变量局部变量&#xff08;如在脚本中暂时创建的变量&#xf…

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库&#xff0c;性能强是建立在专业运维之上的&#xff0c;需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批…