当前位置: 首页 > news >正文

Eclipse + GDB + J-Link 的单片机程序调试实践

Eclipse + GDB + J-Link 的调试实践

本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。

对 Eclipse 的要求

  • 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。
  • 从 https://www.eclipse.org/downloads/packages/ 下载 Eclipse IDE for Embedded C/C++ Developers ,此版本已经包含所需插件。
    在这里插入图片描述

配置 J-Link 路径

  • 通过菜单 Window>>Preferences 打开全局配置对话框,选择 MCU>>Global SEGGER J-Link Path ,在相应输入框填入 GDBServer 可执行文件名和所在路径。
    在这里插入图片描述

创建调试配置

  • 通过菜单 Run >> Debug configurations… 打开调试配置对话框。
  • 左侧列表中选中 GDB SEGGER J-Link Debugging ,点击左上角 New launch configuration 按钮,新建一个调试配置。
    在这里插入图片描述

调试配置 Main 标签页

  • 确认 Project 名是否正确,若不正确或为空,那么点击右侧 Browse… 按钮选择正确的工程。
  • 确认 C/C++ Application 是否为待调试程序,若不正确或为空,点击右侧 Search Project… 或 Browse…按钮选择待调试程序。
    在这里插入图片描述

调试配置 Debugger 标签页

  • Device name 输入框输入 MCU 型号。
  • 所支持的 MCU 型号可以通过 SEGGER J-Link GDB Server 的 Target Device Settings 对话框查看。
    在这里插入图片描述

调试配置 Startup 标签页

  • 去除 Enable flash breakpoints 选项。
  • 去除 Enable semihosting 选项。
  • 填入 CPU 时钟。
    在这里插入图片描述

调试配置 SVD Path 标签页

  • 若调试驱动程序,需要查看外设寄存器,那么需要指定 SVD file 。
  • 只调试应用层代码,可以忽略。
    在这里插入图片描述

开始调试

  • 配置完成后,点击配置对话框右下角Debug 按钮即可开始调试。
  • 调试配置将保存在 workspace 中,下次需要再次调试时,可以点击菜单Run>>Debug history 中的对应项开始调试,也可以通过工具栏按钮开始调试,见下图。点击调试按钮开始与最近的调试一样的调试,点击调试按钮右侧三角型按钮弹出菜单,可以选择所需的调试配置或菜单。
    在这里插入图片描述

调试控制

  • 开始调试后, Eclipse 将进入调试窗口布局。

  • Eclipse 工具栏将显示调试控制工具,如下图。
    在这里插入图片描述

  • Resume ,连续执行,直到碰到断点或点击暂停按钮。即 Run 操作。
    在这里插入图片描述

  • Suspend ,暂停,连续执行状态下,点击暂停按钮,将在当前位置停止执行。即 Halt 操作。
    在这里插入图片描述

  • Terminate ,结束本次调试。即 Stop 操作。
    在这里插入图片描述

  • Step Into ,单步执行,碰到函数调用语句则进入函数。
    在这里插入图片描述

  • Step Over ,单步执行,若当前语句为函数调用,则函数调用作为单条语句执行,不进入函数。
    在这里插入图片描述

  • Step Return ,执行完当前函数的剩余代码,返回调用处暂停。
    在这里插入图片描述

  • 指令单步模式,点击该按钮切换指令单步和语句单步。进入指令单步后,将自动打开反汇编窗口,再点击 StepInto 或 Step Over 按钮时仅执行一条指令。
    在这里插入图片描述

  • Restart ,复位MCU ,程序从头重新开始执行。
    在这里插入图片描述

添加断点

  1. 在编辑器视图的行号左侧双击,或点击右键弹出菜单选择 Toggle breakpoint 。
  2. 在 Breakpoints 视图,点击右侧三个点弹出菜单选择 Add xxx Breakpoint 菜单,有多种类型的断点,包括Watchpoint 。
    在这里插入图片描述

查看函数调用栈

  • 通过 Debug 视图查看当前调用栈。下方函数调用上方函数。形成一个调用链。
  • Debug 视图可以配合Variables 视图查看每个函数的局部变量,点击选择Debug 视图中不同的函数, Variables 视图将显示与选中函数相应的局部变量。
    在这里插入图片描述

查看修改局部变量

  • 通过 Variables 视图查看函数局部变量。
  • 当 CPU 进入 Halt 时, Variables视图默认显示函数调用栈顶部函数的局部变量,通过 Debug 视图选择调用栈内的其它函数时, Variables 将显示对应函数的局部变量。
  • 如有必要,可以在 Value 列修改全局变量。
    在这里插入图片描述

查看修改全局变量

  • Expressions 视图查看全局变量。
  • 添加变量到 Expressions 视图的方法:
    • 点击 Expressions 视图右侧的加号,在对话框内填入合法的 C 表达式。
    • 调试模式下,双击选中要查看的全局变量,点击右键菜单,选择 Add Watch Expression 。
    • 点击 Expressions 视图的表示式列表的最
  • 如有必要,可以在 Value 列修改全局变量。
    在这里插入图片描述

查看反汇编

  • 点击工具栏的指令单步或通过菜单 Window>>Show View>>Disassembly 打开 Disassembly 视图。
    在这里插入图片描述

查看 CPU 寄存器

  • Registers 视图查看 CPU 寄存器。
  • 一般情况下,寄存器视图配合指令单步和反汇编视图使用。
  • 如果有需要,可以修改寄存器的值。
    在这里插入图片描述

查看修改外设寄存器

  • Peripherals 视图配合 Memory 视图查看修改外设寄存器。
  • Peripherals 视图中勾选要查看的外设。
  • Memory 视图显示外设寄存器,包括寄存器内的位定义。如有必要,可以修改寄存器值。
    在这里插入图片描述
http://www.lryc.cn/news/386802.html

相关文章:

  • 前端代码生成辅助工具
  • 静态库与动态库总结
  • 深入解析tcpdump:网络数据包捕获与分析的利器
  • 【漏洞复现】科立讯通信有限公司指挥调度管理平台uploadgps.php存在SQL注入
  • 什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术
  • 【linux】gcc快速入门教程
  • 【多维动态规划】Leetcode 97. 交错字符串【中等】
  • 【JavaScript脚本宇宙】精通前端开发:六大热门CSS框架详解
  • 开发技术-Java集合(List)删除元素的几种方式
  • c++ 递归
  • RedHat9 | podman容器
  • 边缘计算项目有哪些
  • 计算fibonacci数列每一项时所需的递归调用次数
  • 【教学类65-05】20240627秘密花园涂色书(中四班练习)
  • Python 学习之基础语法(一)
  • 日志分析-windows系统日志分析
  • 【ARM】MDK工程切换高版本的编译器后出现error A1137E报错
  • 深入 SSH:解锁本地转发、远程转发和动态转发的潜力
  • python如何把一个函数的返回值,当成这个函数的参数值
  • 【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用
  • SpringBoot: Eureka入门
  • Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
  • 智慧校园-实训管理系统总体概述
  • 如何用GPT开发一个基于 GPT 的应用?
  • 大数据生态体系中各组件的区别面试题(更新)
  • 数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)
  • 数字图像处理专栏——introduction
  • Django 模版继承
  • Apipost接口测试工具的原理及应用详解(一)
  • 一款轻量级的通信协议---MQTT (内含Linux环境搭建)