使用vscode编译、调试miniob源码

使用vscode编译、调试miniob源码

引子

最近想继续撸撸OceanBase的代码,发现OB有个项目叫miniob——一个教学级的关系型数据库。从代码量和难易程度上看比较适合我现阶段的精力和水平,开撸前先把环境搞一下。

  • 代码规模(和OceanBase的300w行核心代码不在一个数量级)

image.png

  • miniob官方介绍

miniob 是 OceanBase与华中科技大学联合开发的、面向"零"基础数据库内核知识同学的一门数据库实现入门教程实践工具。 miniob设计的目标是让不熟悉数据库设计和实现的同学能够快速的了解与深入学习数据库内核,期望通过相关训练之后,能够对各个数据库内核模块的功能与它们之间的关联有所了解,并能够在 使用数据库时,设计出高效的SQL。面向的对象主要是在校学生,并且诸多模块做了简化,比如不考虑并发操作。 注意:此代码仅供学习使用,不考虑任何安全特性。

环境准备

运行环境

  • 操作系统
frank@DESKTOP-6NF3B9K:~/git/miniob$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

注:我这里直接用的windows的WSL,

软件要求

  1. vscode

  2. cmake

  3. make

  4. gcc/g++

  5. libevent

  6. googletest

  7. jsoncpp

  8. git

获取代码

git clone https://github.com/oceanbase/miniob.git

安装软件

可以参考miniob/docs/how_to_build.md,但实际上一些依赖可以不用clone在deps目录下,直接安装即可,除非想调试依赖库的代码。

vscode配置

使用vscode打开miniob工程目录。

cd miniob
code .

安装插件

image.png

配置编译tasks.json

在工程的.vscode目录下新建tasks.json

{
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "label": "cmake",
            "command": "cmake",
            "args": [
                "-DDEBUG=ON",
                ".."
            ]
        },
        {
            "label": "make",
            "command": "make"
        },
        {
            "label": "CMake Build",
            "dependsOn": [
                "cmake",
                "make"
            ]
        }
    ],
    "version": "2.0.0"
}

注意:

  • options:cmake临时文件的目录
  • args:cmake需要的参数

配置调试launch.json

在工程的.vscode目录下新建launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/bin/observer",
            "args": ["-f", "../../etc/observer.ini"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "CMake Build"
        }
    ]
}

注意:

  • program:编译出来的可执行文件
  • args:运行参数
  • preLaunchTask:"label": "CMake Build" 对应

演示

  • 重新使用vscode打开,打开后会自动运行tasks的cmake。

image.png

  • 设置断点、启动调试

image.png

注意:启动是会触发make,对工程进行编译。因为是单线程编译,所以第一次惦记启动gdb时需要时间较长,后续如果没有修改源码的操作,则直接踢动gdb进行调试。如果想使用多线程编译可以在tasks.json中配置make参数。

        {
            "label": "make",
            "command": "make",
            "args": [
                "-j",
                "4"
            ]
        },

args中配置相当于make -j 4

终端输出如下:

image.png

  • 调试

image.png

注意:同种标记部分包括调试常用的功能,如:查看变量、调用栈、断点,以及n, s, finish, r等命令。

总结

实际上编译和调试是两个过程,我更习惯只配置调试launch.json,而tasks.json的工作可以直接手动完成,也就是可以参考how_to_build.md 的步骤完成编译,然后直接设置可持续文件的路径进行调试。

同样的道理,这种调试方法可以用到其他项目的源码调试中,比如之前调试PostgreSQL和openGauss都可以用这个方法。

使用 VSCode 编译 STM32 源码之前,需要先安装以下工具: 1. ARM GCC 编译器:用于编译 STM32 项目的程序代码。 2. ST-Link 软件:用于将编译好的程序代码下载到 STM32 开发板上。 3. STM32CubeMX:用于生成 STM32 项目的代码框架和初始化代码。 接下来,按照以下步骤进行操作: 1. 安装 C/C++ 扩展程序:在 VSCode 中搜索并安装 "C/C++" 扩展程序,以便在 VSCode 中编写和调试 C/C++ 代码。 2. 配置编译器路径:打开 VSCode,进入 "File" -> "Preferences" -> "Settings",在搜索框中输入 "C_Cpp.default.compilerPath",然后将 ARM GCC 编译器的路径添加进去。 3. 配置调试器路径:同样在设置中搜索 "C_Cpp.default.debuggerPath",将 ST-Link 调试器的路径添加进去。 4. 创建 STM32 项目:使用 STM32CubeMX 创建一个 STM32 项目,并生成代码框架和初始化代码。 5. 打开项目:打开 VSCode,进入 "File" -> "Open Folder",选择 STM32 项目所在的文件夹。 6. 创建 build 目录:在项目文件夹中创建一个 build 文件夹。 7. 修改 launch.json 文件:在 VSCode 中打开项目文件夹,并在 ".vscode" 文件夹中创建一个名为 "launch.json" 的文件。将以下代码添加到文件中: ``` { "version": "0.2.0", "configurations": [ { "name": "Debug STM32", "type": "cortex-debug", "request": "launch", "cwd": "${workspaceFolder}", "executable": "${workspaceFolder}/build/${workspaceRootFolderName}.elf", "device": "stlink", "svdFile": "${workspaceRoot}/STM32F103C8.svd", "servertype": "stlink", "configFiles": [ "${workspaceRoot}/.gdbinit" ] } ] } ``` 其中,"executable" 指定了编译生成的 ELF 文件的路径,"svdFile" 指定了 STM32 芯片的 SVD 文件路径,用于在调试时显示寄存器的值。 8. 修改 tasks.json 文件:在 ".vscode" 文件夹中创建一个名为 "tasks.json" 的文件,并将以下代码添加到文件中: ``` { "version": "2.0.0", "tasks": [ { "label": "build STM32", "type": "shell", "command": "make -C ${workspaceFolder}/build", "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "owner": "cpp", "fileLocation": [ "relative", "${workspaceFolder}/build" ], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ] } ``` 其中,"command" 指定了编译 STM32 项目的命令。 9. 编译调试:在 VSCode 中打开项目文件夹,按下 "Ctrl + Shift + B" 编译项目。编译完成后,按下 "F5" 开始调试。 以上就是使用 VSCode 编译 STM32 源码的步骤。需要注意的是,在编译调试之前,需要在 STM32CubeMX 中正确配置项目的参数和引脚映射关系。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏 克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值