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

18、【OS】【Nuttx】用gdb调试nuttx os

背景

接之前wiki
14、【OS】【Nuttx】Nsh中运行第一个程序
15、【OS】【Nuttx】OS裁剪,运行指定程序,周期打印当前任务
程序跑起来了,OS也裁剪了,下一步就是调试了

目标

用gdb把nuttx程序跑起来

准备环境

vscode商店里C和C++相关的调试插件装一下,这里不用Runner
在这里插入图片描述

  • build-essential:确保安装了所有编写和编译C/C++代码所需的最基础软件
sudo apt-get install build-essential

查看下gdb版本,版本ok

adminpc@adminpc-:~/nuttx_plat$ gdb -v
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

查看下gdb的位置,等会儿要用

adminpc@adminpc:~/nuttx_plat$ which gdb
/usr/bin/gdb

配置文件

项目目录如下:
/nuttx_plat/.vscode
/nuttx_plat/nuttx
/nuttx_plat/nuttx-apps
这里有三个关键文件,launch.json,tasks.json,build,位置如下
/nuttx_plat/.vscode/launch.json
/nuttx_plat/.vscode/tasks.json
/nuttx_plat/nuttx/scripts/build

  • launch.json文件如下,解释下关键配置项:
    program:即最终构建生成的可执行文件
    externalConsole:外部控制台选择false,毕竟vscode连接的linux,没有多余窗口
    stopAtEntry:是否停在程序入口,按需选择
    preLaunchTask:启动调试前,要先做的任务,一般就是构建任务,不然可执行文件从哪里来
    miDebuggerPath:gdb路径,前面找过的
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) nuttx_os",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/nuttx/nuttx",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}/nuttx",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "nuttx_build",
            "miDebuggerPath": "/usr/bin/gdb",
            "logging": {
                "engineLogging": false,
                "traceResponse": false
            }
        }
    ]
}
  • tasks.json文件如下,解释下关键配置项
    label:任务标签要和launch.json的preLaunchTask配置项保持一致
    type:任务的执行环境为shell
    command:将启用一个新终端,来执行args参数里面的任务
    args:这里传递构建脚本作为参数给终端执行
    option/cwd:构建脚本执行时的工作目录
    group/kind:执行的是构建活动
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "nuttx_build",
            "type": "shell",
            "command": "/bin/bash",
            "args": [
                "${workspaceFolder}/nuttx/scripts/build"
            ],
            "options": {
                "cwd": "${workspaceFolder}/nuttx/scripts"
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$gcc"],
            "detail": "Generated task to build the project using make."
        }
    ]
}
  • build文件如下,该文件主要定义了nuttx的构建活动,前面的wiki都有介绍过
#!/bin/bash

cd ..
make distclean
tools/configure.sh sim:ostest
make

执行调试&效果

配置好上面两个json后,左边菜单debug会出现我们配置的(gdb)nuttx_os
在这里插入图片描述
点击调试,vscode会自动新建个终端执行构建活动
在这里插入图片描述
构建结束后会自动跳到程序入口进行等待
在这里插入图片描述

和直接gdb在终端里面调试效果一样

adminpc@adminpc:~/nuttx_plat/nuttx$ gdb nuttx 
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from nuttx...
(gdb) break main
Breakpoint 1 at 0x40001316: file sim/sim_head.c, line 166.
(gdb) run
Starting program: /home/adminpc/nuttx_pdt/nuttx/nuttx 

This GDB supports auto-downloading debuginfo from the following URLs:
  <https://debuginfod.ubuntu.com>
Enable debuginfod for this session? (y or [n]) y
Debuginfod has been enabled.
To make this setting permanent, add 'set debuginfod enabled on' to .gdbinit.
Downloading separate debug info for system-supplied DSO at 0x7ffff7fc3000
[Thread debugging using libthread_db enabled]                                                                                                                               
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=32767, argv=0x7fffffffdf70, envp=0x7ffff7fe5af0 <dl_main>) at sim/sim_head.c:166
166     {
(gdb) 

http://www.kler.cn/a/458995.html

相关文章:

  • 前端-计算机网络篇
  • Luma AI 简单几步生成视频
  • MyBatis-plus sql拦截器
  • 数据结构考前一天
  • Niushop商城商业插件_cps联盟_包装转换_视频购物_同城配送_上门预约等插件的安装方法
  • C++ —— 智能指针
  • 轮胎识别数据集,可对生产流水线里的轮胎图片标注,支持yolo,coco json,voc xml格式的标注,一共785张采集图片
  • IDEA XML 文件 SQL 提示
  • 【每日学点鸿蒙知识】桌面快捷方式API、Swiper显示异常、Page防止截屏、Tabs组件监听显示隐藏、PDF翻页回调
  • ubuntu快速入门
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(22):密钥协商算法
  • Axure RP11安装学习
  • [Day 10]有序数组的平方
  • 平衡车PID算法 学习日记
  • 如何删除Mac上的系统数据
  • 【论文阅读】DebSDF:深入研究神经室内场景重建的细节和偏差
  • Flink 中的 Time 有哪⼏种?
  • 【Python】正则表达式的艺术:轻松驾驭 Python 的re库
  • MySQLOCP考试过了,题库很稳,经验分享。
  • springboot521基于Spring Boot的校园闲置物品交易系统(论文+源码)_kaic
  • 损失函数-二分类和多分类
  • 使用Python实现医疗图像处理:探索AI在医学影像中的应用
  • 蓝桥杯真题———日期问题
  • 若依(spring-cloud)修改登陆密码加密算法
  • Redis 数据库
  • 百度地图绘制行政区域及设置中心点