how_to_dev_miniob_by_vscode.md 3.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# 环境准备
## 运行环境
* 操作系统

```bash
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++
夏克 已提交
27 28 29 30
5. libevent
6. googletest
7. jsoncpp
8. git
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

## 获取代码
```bash
git clone https://github.com/oceanbase/miniob.git
```
## 安装软件
可以参考miniob/docs/how\_to\_build.md。



# vscode配置
使用vscode打开miniob工程目录。

```bash
cd miniob
code .
```
## 安装插件
|![image](images/vscode_search_plugs.png)|![image](images/vscode_C++_plugs_detail.png)<br>|
| ----- | ----- |

## 配置编译tasks.json
> 在工程的.vscode目录下新建tasks.json

```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

```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](images/vscode_cmake.png)

* 设置断点、启动调试

![image](images/vscode_break_point.png)

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

```json
        {
            "label": "make",
            "command": "make",
            "args": [
                "-j",
                "4"
            ]
        },
```
args中配置相当于make -j 4

终端输出如下:

![image](images/vscode_build_ouput.png)

* 调试

![image](images/vscode_debug_miniob.png)

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