当前位置:网站首页>GDB 在嵌入式中的相关概念
GDB 在嵌入式中的相关概念
2022-07-03 01:06:00 【TangZhenye】
1. 背景
在嵌入式开发中调试器起着非常大的作用,下载程序、单步调试程序、下断点、通过函数调用栈查看函数调用关系等。通常我们不关心调试器的工作原理,只管调试就好,但是底层原理的认知是非常重要的,本文将打开一大块知识拼图。
2. GDB 是什么
本人理解,不按照官方的解释,什么GNU计划什么的。GDB 是 gcc 工具链带的一个调试程序,注意是程序。
3. GDB 的两个概念
GDB 是程序,调试器也只是运行着 GDB 程序的嵌入式工具罢了,调试器中的 GDB 程序常称为 GDB Server,顾名思义,就是个 GDB 服务器。服务器是服务客户端的,一直监听客户端发来的请求。所以,PC 端一定存在一个 GDB Client 的客户端程序。
经常用的 Jlink,ST-link 等调试工具,一般都用自己的 gdb server 程序运行在上面,因此,我们通常通过芯片上的 JTAG 接口,SWD 接口与调试器连接,连接上后,我们在 IDE 上点击小虫子按钮来调试板子,此时,IDE 中已经集成了 GDB Client,IDE 通过这个 Client 与 ST-link 或者 Jlink 中的 Server 通讯,比如发送个断点指令(在 IDE 中就点击出现个红色圈圈),然后全速运行,Client 就会发送全速运行的命令给 Server,此时 Server 就通过实际的连的杜邦线将信号发到芯片内部调试单元上,芯片就跑了起来。
4. GDB 串行协议
通常我们使用调试器连接开发板,这样 Client 与 Server 之间发送的命令很难观察到,因此,可以通过 qemu 的方式,让 qemu 运行 Server 程序并启动网络协议栈,Client 通过网络的方式连接 Server 来调试 Server 端的代码,这样,通过抓包工具将 Client 与 Server 之间交互的数据给抓下来,就能够知道他俩之间到底都说了啥。
5. GDB 相关命令
gdb xxx.elf // client 端载入符号表
target remote ip:port // 连接 Server
load xxx.elf // 将 elf load 到 Server 端,相当于给板子重新下载程序
b xxx // 在xxx 出下断点
c // 全速运行,遇到断点停止
bt // 显示函数调用栈
.
.
.
.
.
边栏推荐
- Matlab finds the position of a row or column in the matrix
- 按键精灵打怪学习-多线程后台坐标识别
- [技术发展-23]:DSP在未来融合网络中的应用
- [untitled]
- d. LDC build shared library
- 力扣 204. 计数质数
- [my advanced journey of OpenGL learning] collation of Euler angle, rotation order, rotation matrix, quaternion and other knowledge
- Why can't the start method be called repeatedly? But the run method can?
- [Cao gongzatan] after working in goose factory for a year in 2021, some of my insights
- leetcode 2097 — 合法重新排列数对
猜你喜欢

Excel calculates the difference between time and date and converts it into minutes

After reading this article, I will teach you to play with the penetration test target vulnhub - drivetingblues-9

MySQL - database query - basic query

海量数据冷热分离方案与实践

JDBC courses

How is the mask effect achieved in the LPL ban/pick selection stage?

leetcode刷题_两数之和 II - 输入有序数组
![[androd] module dependency replacement of gradle's usage skills](/img/5f/968db696932f155a8c4a45f67135ac.png)
[androd] module dependency replacement of gradle's usage skills

MySQL foundation 05 DML language

MySQL
随机推荐
Swiftui component Encyclopedia: using scenekit and swiftui to build interactive 3D pie charts (tutorial with source code)
Androd Gradle 对其使用模块依赖的替换
Machine learning terminology
MySQL foundation 06 DDL
What are the trading forms of spot gold and what are the profitable advantages?
C#应用程序界面开发基础——窗体控制(2)——MDI窗体
攻克哈希的基本概念与实现
[C language] detailed explanation of pointer and array written test questions
Basic concept and implementation of overcoming hash
Excel if formula determines whether the two columns are the same
Leetcode 2097 - Legal rearrangement of pairs
按鍵精靈打怪學習-多線程後臺坐標識別
tail -f 、tail -F、tailf的区别
Key wizard play strange learning - multithreaded background coordinate recognition
测试右移:线上质量监控 ELK 实战
一比特苦逼程序員的找工作經曆
C application interface development foundation - form control (2) - MDI form
Druid database connection pool
软考信息系统项目管理师_历年真题_2019下半年错题集_上午综合知识题---软考高级之信息系统项目管理师053
力扣 204. 计数质数