0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

linux环境下在线调试环境的搭建方案解析

电子设计 来源:面包板社区 作者:一口Linux 2021-03-02 15:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.引言

单片机一般使用Jlink通过SWD或者JTAG接口直接在IDE中在线调试,Linux应用程序通常是加printf输出log去调试,这种方式简单,但是有些隐藏的程序bug只通过加打印信息不那么容易定位,这时可以通过类似单片机调试的gdb调试来实现,本篇为大家介绍linux环境下在线调试环境的搭建,希望对大家有所帮助。

GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.

它的工作原理是:在主机Ubuntu下运行gdb,在嵌入式板子上运行gdbserver,这样就可以在线调试了。

2.环境介绍

2.1.硬件

1) 网上的一个第三方做的NUC972开发板:

有兴趣购买的朋友,可以去他们的淘宝店购买

2.2.软件

1) Uboot继续使用之前文章用的,无须改动。

2) Kernel在上一篇基础上,无须改动。

3) Rootfs在上一篇用Buildroot生成的基础上,需要做一定的改动,用来生成gdbserver。

3.Buildroot配置

Buildroot里需要做一定的配置,用来生成gdb和gdbserver,步骤如下:

1) 确认Toolchain | Build cross gdb for the host 是否选中,这个默认是选中的。

这个的作用是:Build a cross gdb that runs on the host machine and debugs programs running on the target. It requires 'gdbserver' installed on the target。

2) 选中Toolchain下的Thread library debugging,注意一定得先选中这个,不然第三步无法执行。

3) 选中Target packages | Debugging, profiling and benchmark->gdb和gdbserver

上面的作用是:

This option allows to build gdbserver and/or the gdb debugger for the target.For embedded development, the most common solution is to build only 'gdbserver' for the target, and use a cross-gdb on the host.

4) 保存,编译即可。

生成的gdb位于:/home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/host/usr/bin

目录中

生成的gdbserver位于:

/home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/target/usr/bin 目录中

5) 将上述gdbserver直接放到板子的/usr/bin目录里即可,然后登录板子输入gdbserver,可以看到如下信息,说明板子的gdbserver已经搭建好了。

4.新建测试程序

1)新建一个测试程序gdbtest.c

#include int main(){ char s[64] = "Welcome to www.topsemic.com"; int a = 1; int c = a*2; int *ptr = NULL; printf("s is :%s ", s); printf("c is : %d ", c); *ptr = 20; printf("%d ",*ptr); return 0;}

2)交叉编译

topsemic@topsemic-virtual-machine:~/nuc972/examples/gdbserver$ arm-linux-gcc gdbtest.c -o gdbtest -g

注:arm-linux-gcc gdbtest.c -o gdbtest -g其中”-g”参数表示进行 GDB 编译。

这个程序放到板子里运行结果如下:

我们用下面的在线调试方法去看看什么原因导致的Segmentation fault

5.在线调试

调试前,将板子和PC之间通过网线相连接,步骤如下:

1) 在开发板可执行程序所在的目录下,执行如下命令启动gdbserver:

命令格式:gdbserver :

192.168.0.80 为Ubuntu 的 IP 地址, 1234 为连接的端口

注:需要先将虚拟机Ubuntu的IP配置为固定的192.168.0.80,这个设置方法在《Linux学习系列八:操作网口》中有介绍

2) 在Ubuntu下启动gdb调试,命令格式:

<应用程序路径>

topsemic@topsemic-virtual-machine:~/nuc972/examples/gdbserver$ /home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/host/usr/bin/arm-linux-gdb gdbtest

3) 在弹出的上述对话框(gdb)后输入以下命令,连接开发板

(gdb)target remote 192.168.0.100:1234

其中192.168.0.100 是开发板的IP地址

4)之后就可输入如下 GDB 调试命令,其他调试命令的详细用法请输入”help 命令名称”查阅。

命令:l,参看代码。

命令:b main,在 main处设置断点。

命令:b 6,在第六行设置断点。

命令:c,继续执行。

命令:n,单步执行。

命令:q,退出gdb。

一直输入 c, 直到程序结束。

单步调试,同时查看板子上打印的信息

可以看到板子程序执行的过程和Ubuntu上加的断点运行的进度一致,另外可以

发现是因为line 10 导致的Segmentation fault,这样就定位到了出问题的地方。

注:https://man.linuxde.net/gdb 可以看到详细的gdb命令用法。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45570

    浏览量

    673393
  • Linux
    +关注

    关注

    88

    文章

    11810

    浏览量

    219513
  • Ubuntu
    +关注

    关注

    5

    文章

    616

    浏览量

    33645
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AT32开源鸿蒙开发环境搭建

    、编译环境准备及常见问题说明。通过本指南,开发者可以快速构建可用的鸿蒙开发环境,为后续的应用开发、系统移植和功能调试打下坚实基础。 本指南适用于有一定 Linux 使用经验的开发人员
    发表于 01-16 13:56

    linux-arm开发环境的简单配置

    linux-arm开发环境简单配置 关于linux-arm开发环境简单配置是ARM学习的第一步,很多初学者会在这问题上纠结很久都不能配置好开发环境
    发表于 01-13 07:56

    从零搭建嵌入式开发环境:C、Makefile、调试全流程

    很多人刚开始学嵌入式的时候,第一件事就被环境卡住。“Keil安装不上、STM32CubeIDE卡死、make命令找不到、下载不进芯片”——这些问题往往比代码更容易劝退人。实际上,搭建环境这件事看似
    的头像 发表于 01-09 19:04 905次阅读
    从零<b class='flag-5'>搭建</b>嵌入式开发<b class='flag-5'>环境</b>:C、Makefile、<b class='flag-5'>调试</b>全流程

    经验分享 | eclipse搭建先楫开发环境

    最近有小伙伴留言,想在eclipse平台下开发先楫的MCU,但是苦于没有工程模板,自己折腾了半天又遇到一堆报错,很费时间。基于此需求,笔者基于HPM6E00EVK一步一步搭建在eclipse下的开发环境,可以顺利实现仿真和调试
    的头像 发表于 12-19 08:32 1098次阅读
    经验分享 | eclipse<b class='flag-5'>搭建</b>先楫开发<b class='flag-5'>环境</b>

    IDC机房环境监测方案—全解析

    文章由山东华科信息技术有限公司提供在数字化转型加速的今天,IDC机房作为数据存储与计算的核心载体,其运行环境稳定性直接影响业务连续性。本文系统解析IDC机房环境监测方案的设计逻辑与实施
    的头像 发表于 12-10 09:22 443次阅读
    IDC机房<b class='flag-5'>环境</b>监测<b class='flag-5'>方案</b>—全<b class='flag-5'>解析</b>

    实验室环境在线监测管理系统方案

    在科研活动日益频繁、实验精度要求不断提高的当下,实验室环境的稳定性与可控性成为保障实验成功与数据可靠的关键因素。某工厂要求对多个实验室、仓库、走廊等区域的环境进行在线监测与管理,以确保及时发现
    的头像 发表于 11-26 14:29 501次阅读
    实验室<b class='flag-5'>环境</b><b class='flag-5'>在线</b>监测管理系统<b class='flag-5'>方案</b>

    移植蜂鸟需要在Linux环境下吗?

    《手把手教你设计CPU》书上运行Verilog仿真测试那章说为了重现仿真环境,最好在Linux环境下。不知道移植蜂鸟是否需要在Linux环境
    发表于 11-10 07:42

    在Windows和Linux环境下分别使用Olimex和蜂鸟调试器下载程序

    本队伍编号CICC3042,本篇文章介绍在Windows和Linux环境下分别使用Olimex和蜂鸟调试器下载程序,和上一篇Hbirdv2的移植配合使用。 使用过第一版蜂鸟的同学们可能按照书中
    发表于 10-31 08:26

    tiny4412 Qt环境搭建

    1.硬件环境 PC端:ubuntu18.04 开发板硬件平台:tiny4412 内核版本:linux3.5 交叉编译器:arm-linux-gcc Qt版本:Qt5.6 2.搭建 ub
    的头像 发表于 10-21 09:54 913次阅读
    tiny4412 Qt<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—开发环境搭建(一)

    ;还讲解了 GDB 10.2 调试工具的环境搭建、演示程序编译,以及 list、break 等常用调试命令的使用,为开发调试提供全面指导,适
    的头像 发表于 09-18 16:04 716次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—开发<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>(一)

    ESP32-S3的MicroPython开发环境搭建

    本文通过搭建Thonny IDE开发环境,了解了如何给ESP32-S3烧录MircoPython固件和MircoPython应用程序。
    的头像 发表于 09-11 16:02 1987次阅读
    ESP32-S3的MicroPython开发<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>

    开发环境一键部署 | 如何搭建Docker环境编译ARM程序?

    智能化科技领域,嵌入式系统开发占据着极为重要的地位。瑞迅科技RK3568、RK3588主板及核心板以其卓越的性能,为众多应用场景赋能。基于Linux系统搭建其开发环境,为用户开启高效开发的大门。Q痛
    的头像 发表于 08-15 11:06 1151次阅读
    开发<b class='flag-5'>环境</b>一键部署 | 如何<b class='flag-5'>搭建</b>Docker<b class='flag-5'>环境</b>编译ARM程序?

    Linux系统环境监测终极指南

    Linux系统环境主要监测CPU、内存、磁盘I/O和网络流量。
    的头像 发表于 06-25 14:41 978次阅读
    <b class='flag-5'>Linux</b>系统<b class='flag-5'>环境</b>监测终极指南

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装
    的头像 发表于 06-18 15:22 1457次阅读
    迅为RK3576开发板NPUrknn-toolkit2<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>和使用docker<b class='flag-5'>环境</b>安装

    不借助Linux系统,在Windows下如何搭建ZMC900E交叉编译环境

    不需要依赖笨重的虚拟机,也不需要安装双系统。抛开繁琐的环境准备,在Windows上轻松搭建交叉编译环境。本文将介绍如何在Windows上搭建交叉编译
    的头像 发表于 05-21 11:34 1071次阅读
    不借助<b class='flag-5'>Linux</b>系统,在Windows下如何<b class='flag-5'>搭建</b>ZMC900E交叉编译<b class='flag-5'>环境</b>