NextPilot开发指南(20):使用vscode调试scons编译脚本

SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。

遗传自RT-Thread,NextPilot飞行系统也是采用SCons + Kconfig 进行项目的配置和构建。如何在NextPilot中使用scons,请参考NextPilot开发指南

rt-thread/tools文件夹中,有很多被SConstruct或SConscript文件调用的python函数和脚本,比如rt-thread/tools/building.py有些时候python脚本太复杂,遇到问题靠print调试会比较低效,那么如何在命令行运行scons时候调试这些python文件呢。

其实原理很简单:

用户在终端运行scons命令,本质执行 SCons.Script.main(),那么创建了一个scons-debug.py脚本,在脚本中调用SCons.Script.main(),然后让vscode使用debugpy工具调试scons-debug.py文件,这样就实现了调试scons的目的。

准备开发环境

首先安装env-windows或者nextpilot-windows-toolchain,它们提供了rt-thread所需开发环境(比如python、qemu、gcc等)。

然后克隆最新版的rt-thread或者nextpilot-flight-control源代码到本地。

# nextpilot-flight-control
gt clone https://gitee.com/nextpilot/nextpilot-flight-control

安装VS Code,用于调试

调试scons命令

双击nextpilot-flight-control.code-workspace打开VS Code工作空间

创建scons-debug.py

在nextpilot-flight-control/tools/building文件夹添加scons-debug.py文件,内容如下

import SCons.Script

SCons.Script.main()

创建scons-debug.py文件,然后让vscode使用debugpy工具调试scons-debug.py文件。

创建launch.json

在nextpilot-flight-control/bsps/sitl/qemu/.vscode文件夹下launch.json文件,内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "NextPilot Scons-Debug",
             // 使用debugpy工具
            "type": "debugpy", 
            // 启动
            "request": "launch",  
            // 需要scons-debug.py文件
            "program": "D:/nextpilot-flight-control-public/tools/building/scons-debug.py",
            "args": "${command:pickArgs}" // 从输入框获取命令行参数
        }
    ]
}

launch.json相当于给VScode配置了一个启动器,当运行F5的时候,会调用debugpy执行scons-debug.py文件,scons命令行参数由${command:pickArgs}输入。

启动scons调试

在rtos/rt-thread/tools/building.py文件(任何被SConstruct或SConscript调用的python脚本都可以)的PrepareBuilding()函数下面打个断点:

def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = []):

    global BuildOptions
    global Projects
    global Env
    global Rtt_Root

    AddOptions()

    Env = env
    Rtt_Root = os.path.abspath(root_directory)

在左侧工具栏点击“运行和调试”标签,然后“运行...”下拉框中选择“NextPilot Scons-Debug”,再点击“三角形”运行“Scons-Debug”配置。

点击运行之后,会弹出一个输入框,在里面可以输入需要传递给scons的命令行参数,可以根据需要输入,比如--target=mdk5,当然也可以直接回车

回车之后,debugpy会停止在您刚刚打断点的位置了:

接下来就可以使用VScode的单步调试,愉快的排查问题了。

扩展功能

如果您正在开发nextpilot项目,launch.json和scons-debug.py文件都不需要您手动创建,当您在终端运行scons命令的时候,会当前目录的.vscode文件夹自动生成launch.json文件(参考tools/building/vscode_helper.py),选择NextPilot Scons-Debug”配置之后,直接按F5即可调试scons命令了。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值