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

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

    关注

    6034

    文章

    44554

    浏览量

    634504
  • Linux
    +关注

    关注

    87

    文章

    11291

    浏览量

    209299
  • Ubuntu
    +关注

    关注

    5

    文章

    563

    浏览量

    29700
收藏 人收藏

    评论

    相关推荐

    如何搭建企业AI开发环境

    搭建企业AI开发环境是一个复杂而细致的过程,涉及硬件选择、操作系统配置、软件安装、工具选用以及实践等多个方面。下面,AI部落小编将详细介绍如何搭建企业AI开发环境
    的头像 发表于 12-20 10:37 56次阅读

    【MM32F5270】Keil开发环境搭建

    本文是对MM32F5270相关的灵动官网资料和社区现有几篇环境搭建帖的整理和总结。详细且完整的记录了——如何从零搭建MM32F5270 Keil开发环境以及如何编译运行MM32F527
    的头像 发表于 11-06 16:14 2745次阅读
    【MM32F5270】Keil开发<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>

    Linux环境变量配置方法

    Linux环境变量配置分为设置永久变量和临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同。
    的头像 发表于 10-23 13:39 156次阅读

    MCUXpresso IDE下在线联合调试双核MCU工程的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是MCUXpresso IDE下在线联合调试i.MXRT1170双核工程的三种方法。
    的头像 发表于 08-08 15:18 542次阅读
    MCUXpresso IDE<b class='flag-5'>下在线</b>联合<b class='flag-5'>调试</b>双核MCU工程的三种方法

    pytorch环境搭建详细步骤

    PyTorch作为一个广泛使用的深度学习框架,其环境搭建对于从事机器学习和深度学习研究及开发的人员来说至关重要。以下将介绍PyTorch环境搭建的详细步骤,包括安装Anaconda、配
    的头像 发表于 08-01 15:38 787次阅读

    PyTorch深度学习开发环境搭建指南

    PyTorch作为一种流行的深度学习框架,其开发环境搭建对于深度学习研究者和开发者来说至关重要。在Windows操作系统上搭建PyTorch环境,需要综合考虑多个方面,包括软件安装、
    的头像 发表于 07-16 18:29 991次阅读

    环境在线监测系统解决方案

    随着全球环境问题日益严峻,环境在线监测系统作为现代环保技术的关键组成部分,其重要性愈发凸显。在线监测系统,正在成为保障生态环境、预防污染事故
    的头像 发表于 07-10 16:21 436次阅读

    虚拟机的Linux搭建环境,执行到‘设置工具’的时候总是报错,怎么处理?

    虚拟机的Linux搭建环境,执行到‘设置工具’的时候总是报错,请问这个要怎么解决? Attachments
    发表于 06-20 07:26

    VSCODE搭建的IDF编译环境,如何配置调试串口的波特率呢?

    VSCODE搭建的IDF编译环境,如何配置调试串口的波特率呢? 可以支持console命令交互吗?
    发表于 06-18 06:17

    在ELF 1开发环境中使用Qt Creator进行远程调试

    进行操作。QtCreator会通过网络连接到远程设备,将调试信息传输回本地环境。接下来就为各位小伙伴详细解析如何在ELF1开发环境下配置QtCreator,以实现
    的头像 发表于 04-20 11:03 922次阅读
    在ELF 1开发<b class='flag-5'>环境</b>中使用Qt Creator进行远程<b class='flag-5'>调试</b>

    环境在线检测系统厂家有哪些

    JD-CQX7环境在线检测系统是一种能够实时监测环境质量的智能化设备,通过多种传感器和数据处理技术,为用户提供准确的环境信息,从而有效保障环境
    的头像 发表于 03-18 11:37 539次阅读

    cyusb3035只有USB接口和一个UART,能否搭建调试环境

    自己做了块板子,上面有cyusb3035这个芯片,固件部分需要按照要求自己修改,在调试时发现板子目前只有USB接口和一个UART,请问在这种情况下,能否搭建调试环境?假如可以,我改如何
    发表于 02-29 08:17

    TLT507-Android开发环境搭建

    TLT507-Android开发环境搭建
    的头像 发表于 01-26 17:03 589次阅读
    TLT507-Android开发<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>

    使用VeriStand搭建MIL测试环境

    MIL(Model In The Loop)模型在环仿真测试用于在实际系统搭建完成之前进行模型测试,使用VeriStand搭建MIL测试环境,可以在不需要硬件资源的情况下测试控制模型。
    的头像 发表于 01-05 10:42 4544次阅读
    使用VeriStand<b class='flag-5'>搭建</b>MIL测试<b class='flag-5'>环境</b>

    Linux环境变量配置方法

    想必大家平时工作中也会配置Linux环境变量,但是可能也仅仅是为解决某些工具的运行环境,对于Linux环境变量本身的配置学问还没深入了解。
    的头像 发表于 01-04 09:51 528次阅读