19、【OS】【Nuttx】【Python】gdb调试优化,python实现构建脚本

背景

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

已经可以用gdb调试os程序了,不过有一点麻烦的是,每次点击调试按钮,都需要重新配置,构建一遍,甚是麻烦,

目标

gdb调试时,提供构建选项,需要全量构建(重新配置程序),还是增量构建(不需要配置程序,只对修改的文件执行增量编译),还是不需要构建,直接调试(很多时候调试不用重新编译)

解决方案

考虑到编程语言的友好性和可移植性,放弃shell脚本,选择python作为构建脚本

vscode商店安装必要的python包

构建脚本路径如下:

/nuttx/scripts/build

python 复制代码
#!/usr/bin/env python3

import os
import argparse
import subprocess

def main():
    # 创建 ArgumentParser 对象
    parser = argparse.ArgumentParser(description="处理构建选项")

    # 添加命令行选项
    parser.add_argument('-r', '--recursive', action='store_true', help='递归处理目录中的所有文件,并进行重新配置')

    # 解析命令行参数
    args = parser.parse_args()

    os.chdir("..")
    if args.recursive:
        subprocess.run(["make", "distclean"], text=True)
        subprocess.run(["tools/configure.sh", "sim:ostest"], text=True)
        subprocess.run(["make clean; make"], text=True)
    else:
        subprocess.run(["make"], text=True)

if __name__ == "__main__":
    main()

这里选择 -r 作为全量构建的编译选项,recursive 递归处理项目中所有文件,并进行重新配置,当没有 -r 编译选项时,默认使用增量构建,即只对修改过的文件进行编译并重新链接,加快构建过程

重新调整tasks.json

这里新增了三个输入选项,全量构建,增量构建,直接调试;选择全量构建和增量构建时,会调用上面的构建脚本执行对应构建;直接调试则会跳过构建过程,直接调试输出件(前提得有)

bash 复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "nuttx_build", // 这个标签应该与 launch.json 中的 preLaunchTask 匹配
            "type": "shell",
            "command": "bash",
            "args": [
                "-c",
                "build() { if [ \"$1\" == \"skip\" ]; then return; else ${workspaceFolder}/nuttx/scripts/build $1; fi; }; build \"${input:build_select}\""
            ],
            "options": {
                "cwd": "${workspaceFolder}/nuttx/scripts" // 设置当前工作目录
            },
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$gcc"],
            "detail": "Generated task to build the project using make."
        }
    ],
    "inputs": [
        {
            "id": "build_select",
            "type": "pickString",
            "description": "need build?",
            "options": [
                {
                    "label": "全量构建",
                    "value": "-r",
                },
                {
                    "label": "增量构建",
                    "value": "",
                },
                {
                    "label": "直接调试",
                    "value": "skip",
                }
            ],
            "default": "skip"
        }
    ],
}

launch.json不变,还是老样子

bash 复制代码
{
    "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", // GDB 的路径,如果不在默认路径中请指定
            "logging": {
                "engineLogging": false,
                "traceResponse": false
            }
        }
    ]
}

最终效果

点击调试选项,会跳出三个选项供选择

选择直接调试将直接跳过构建过程,进入调试环节,大大提升了调试效率

选择全量构建,进入构建模式,并重新配置项目

选择增量构建,进入构建模式,不会重新配置项目

完美

相关推荐
WenGyyyL1 天前
基于昇腾平台的Qwen大模型推理部署实战:从模型转换到推理(含代码)
人工智能·python·语言模型·nlp·昇腾
q***54751 天前
解决no main manifest attribute错误
ide·python·pycharm
玩大数据的龙威1 天前
农经权二轮延包—批量替换签名盖章页扫描页
python
AI视觉网奇1 天前
手部检测 yolov5 实战笔记
python·深度学习·计算机视觉
WXG10111 天前
【Flask-7】前后端数据交互
python·ios·flask
hyswl6661 天前
数字货物搬家小程序
python·小程序
LDG_AGI1 天前
【推荐系统】深度学习训练框架(六):PyTorch DDP(DistributedDataParallel)数据并行分布式深度学习原理
人工智能·pytorch·分布式·python·深度学习·算法·spark
背心2块钱包邮1 天前
第24节——手搓一个“ChatGPT”
人工智能·python·深度学习·自然语言处理·transformer
执笔论英雄1 天前
【大模型推理】小白教程:vllm 异步接口
前端·数据库·python
databook1 天前
Manim v0.19.1 发布啦!三大新特性让动画制作更丝滑
后端·python·动效