数据库管理系统设计大赛的环境搭建和测试

环境部署

背景

RMDB的推荐实验环境如下:

  • 操作系统:Ubuntu18.04 (x86_64)
  • CMake:3.16及以上版本
  • GCC:7.1及以上版本,要求⽀持C++17等新标准

因为要参加一下这个比赛,这个比赛要求在Ubuntu中开发。之前有用过CentOS,但是还是有点不同。这里也记录一下

操作系统

这里还是打算在VM虚拟机中模拟实验环境。安装好VM后,先找个Ubuntu的镜像。像CentOS建立虚拟机的步骤一样。然后就是尝试用ssh远程连接。之前用的是Xshell。因为项目要写C++代码,我们可以用VScode远程连接。

  • 首先在VScode中添加remote-ssh扩展。然后点击软件左下角的远程连接按钮(没有的可以右键添加)
    image
  • 选中连接到主机
  • 配置ssh主机
  • .ssh/config
  • 配置ip地址和用户名,并保存
    image
  • 再进入链接到主机,会看到已有该远程连接
  • 进入之后输入登录密码即可

依赖环境库配置

在Linux中输入如下命令即可

sudo apt-get install build-essential # build-essential packages, including gcc,g++, make and so on
sudo apt-get install cmake # cmake package
sudo apt-get install flex bison # flex & bison packages
sudo apt-get install libreadline-dev # readline package

Git

还需要再Linux中使用Git,首先要现在Git

sudo apt-get update  
sudo apt-get install git

然后可以用https方式把代码拉取到虚拟机,但是每次提交需要输入账号密码,所以用ssh会对经常提交的操作更方便。同样也建议用ssh方式连接vscode
首先我还没有gitlab的公钥,这里需要再项目的git中生成一下公钥。输入如下命令即可

ssh-keygen -t ed25519 -C "你的邮箱"  # 推荐 ed25519 算法,也可用 rsa

然后一路回车,生成密钥
image

然后可以看出密钥已经保存。打开.pub文件,把公钥复制到gitlab中,保存即可
image

ssh的公钥理解

  • 密钥生成:在虚拟机(本地机器)用 ssh - keygen 生成公钥 - 私钥对,公钥可公开,私钥自己妥善保存(像大门的 “加密锁” 和 “专属钥匙” )。
  • 关联 GitLab:把虚拟机生成的公钥,添加到 GitLab 个人账户的 SSH 密钥配置里。这一步相当于告诉 GitLab:“这台虚拟机用这个公钥代表我,以后它用私钥证明身份时,你就认~”
  • 免密原理:之后虚拟机和 GitLab 交互(拉取 / 推送代码),会用私钥加密验证信息,GitLab 拿你之前存的公钥解密。验证通过,就不用每次输账号密码,直接 “刷钥匙进门” 。
    简单说,就是公钥当 “身份凭证” 存 GitLab,私钥在本地当 “密码钥匙”,配对成功就免密操作啦,核心是利用非对称加密的身份验证~

问题

  • 这里现实连接失败,然后开始排查错误【Linux远程登录ssh不了,怎么解决?】,发现未安装 OpenSSH服务器软件包,输入apt install openssh-server后解决。
  • 连接成功后,在vscode中无法修改和新建文件,这是因为权限问题,这里可以用umask关键字放开。 umask(用户掩码) 设置新建文件 / 目录默认权限,核心逻辑是 “默认最大权限减去 umask 值”。用umask指令可以查看当前的值,我们直接umask 0000。即可,这样新建文件目录时,默认没有权限限制。

编译测试

本地测试步骤

  1. 进入项目根目录

    cd /path/to/db2025
    
  2. 创建并进入构建目录

    mkdir -p build && cd build
    
  3. 使用CMake配置项目

    cmake ..
    
  4. 编译项目

    make -j4
    
  5. 运行单元测试

    ./bin/unit_test
    
  6. 运行特定测试(如RecordManagerTest.SimpleTest):

    ./bin/unit_test --gtest_filter=RecordManagerTest.SimpleTest
    

关键目录说明

  1. src/:源代码目录

    • storage/:存储管理相关代码(包括disk_manager.cpp
    • record/:记录管理相关代码
    • test/:测试代码(unit_test.cpp在这里)
  2. build/:构建目录

    • 所有编译生成的文件都在这里
    • bin/unit_test是测试可执行文件
  3. rmdb_client/:客户端代码

    • 需要单独编译和运行

完整测试流程示例

# 1. 进入项目根目录
cd ~/db2025

# 2. 清理并创建构建目录
rm -rf build/*
mkdir -p build && cd build

# 3. 配置项目
cmake ..

# 4. 编译项目
make -j4

# 5. 运行所有测试
./bin/unit_test

# 6. 或者只运行特定测试
./bin/unit_test --gtest_filter=RecordManagerTest.SimpleTest

# 7. 如果测试失败,查看详细输出
./bin/unit_test --gtest_filter=RecordManagerTest.simpleTest --gtest_output=xml:results.xml

常见问题解决

  1. 编译错误

    • 确保安装了所有依赖:sudo apt-get install build-essential cmake flex bison libreadline-dev
    • 检查CMake版本:cmake --version(需要≥3.16)
  2. 测试失败

    • 使用gdb调试:
      gdb ./bin/unit_test
      (gdb) run --gtest_filter=RecordManagerTest.simpleTest
      
  3. 文件权限问题

    • 确保有读写权限:chmod -R a+rw ~/db2025
  4. 清理构建

    • 完全清理:rm -rf build/*
    • 部分清理:make clean

./命令语法解释

./bin/unit_test [选项] [测试过滤参数]
  1. ./

    • 表示在当前目录下执行命令
    • 避免系统在 PATH 环境变量中搜索可执行文件
  2. bin/

    • 可执行文件所在的目录(通常是构建后生成的)
    • 在 CMake 项目中默认存放编译后的二进制文件
  3. unit_test

    • 单元测试的可执行文件名
    • 由 CMake 根据项目配置生成(通常是 add_executable(unit_test ...) 定义)
  4. [选项]

    • Google Test 框架提供的命令行选项
    • 控制测试行为和输出格式
  5. [测试过滤参数]

    • 指定要运行的特定测试或测试套件

常用选项和参数

选项/参数 说明 示例
--gtest_filter 过滤要运行的测试 --gtest_filter=RecordManagerTest.*
--gtest_list_tests 列出所有可用测试而不运行 --gtest_list_tests
--gtest_repeat 重复运行测试 --gtest_repeat=3
--gtest_output 设置测试报告输出格式 --gtest_output=xml:results.xml
--gtest_break_on_failure 遇到测试失败时进入调试器 --gtest_break_on_failure
--gtest_shuffle 随机顺序运行测试 --gtest_shuffle
--gtest_color 控制彩色输出 --gtest_color=yes
posted @ 2025-06-17 17:31  韩熙隐ario  阅读(23)  评论(0)    收藏  举报