文章

SQLite3 源码分析-准备工作

SQLite3 源码分析-准备工作

前记

我们此次对 SQlite3 3.40 版本的源码进行分析,可以直接在 gitee 上进行下载。操作系统我们这次使用的是 Rocky Linux 9 ,当然也可以选择其他系统。此外我们还需要的软件是 Vscode ,可以很方便的帮助我们分析代码,调试代码。

环境准备

下载代码

1
git clone -b version-3.40.0 https://gitee.com/mirrors/sqlite.git

安装 gcc

1
sudo yum install gcc

安装 clangd 安装 clangd 是因为我们需要使用 vscode 的 clangd 插件,可以辅助我们查看代码

1
sudo yum install clangd

安装 bear

bear 用于生产 compile_command.json 这个文件,cland 会读取这个文件。

1
sudo yum install bear

安装 vscode

查看 vscode 官网进行安装

安装好 vscode 后,需要安装 codelldb 和 clangd 两个插件。

代码编译

因为 sqlite3 原来的编译方式会将所有的源文件复制到一个 sqlite3.c 文件中进行编译,但是这样的话,会对我们理解代码和调试代码造成一定的困难。因此我们需要调整一下 Makefile 以便调试。

进入 sqlite3 的目录,执行

1
bear -- ./configure --enable-debug

执行完成后生成了一个 Makefile,修改如下:

  1. 将所有的 O2 修改为 O0
  2. 修改 167 行为 USE_AMALGAMATION = 0
  3. 修改 sqlite3 的编译依赖
     sqlite3$(TEXE):	shell.c $(LIBOBJ)
         $(LTLINK) $(READLINE_FLAGS) $(SHELL_OPT) -o $@ \
             shell.c $(LIBOBJ) \
             $(LIBREADLINE) $(TLIBS) -rpath "$(libdir)"
    

    将其中的 sqlite3.c 修改为 $(LIBOBJ)

这样就会使用分散的文件来编译 sqlite3 这个程序了。

编译

1
bear -- make -j4

最后就是生成调试需要的 launch.json 文件,这个是我的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Launch",
            "program": "${workspaceFolder}/sqlite3",
            "args": [
                "test.db"
            ],
            "cwd": "${workspaceFolder}"
        },
        {
            "type": "lldb",
            "request": "attach",
            "name": "Attach",
            "preRunCommands": [
                "process handle SIGWINCH -n true -p false -s false"
            ],
            "pid": "${command:pickMyProcess}" 
        }
    ]
}

其中的 process handle SIGWINCH -n true -p false -s false 是为了屏蔽 SIGWINCH 这个信号。

环境配置到这里就结束了。截图如下:

alt text

本文由作者按照 CC BY 4.0 进行授权