摘要
之前看过关于使用eclipse搭建postgres开发环境的帖子,对于一个曾经的eclipse CDT忠实用户还是很亲切的,不过由于vscode的出现,可能很多像我这样eclipse阵营的小伙伴陆续开始转向vscode了。这里不讨论IDE的优劣,只给大家提供一个搭建postgres开发调试环境的选择,当然,对于linux开发人员来说,直接使用gdb才是正道。
环境搭建
Step 1 下载安装vscode
根据你的操作系统选择对应的版本:下载
我这里是Ubuntu,选择.deb.
Step 2 获取postgres源码并编译
git clone https://github.com/postgres/postgres.git
cd postgres
./configure --prefix=/usr/local/pgsql --enable-debug --without-readline
make -j 6
sudo make install
Step 3 添加vscode C/C++插件
Step 4 配置vscode 环境
点击运行与调试–》添加launch.json配置文件–》编辑launch.json文件–》在文件右下角点击添加配置–》选择C/C++: (gdb) 启动。
生成配置如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.out",
"args": [],
"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
}
]
}
]
}
以上,基础的vscode开发配置搭建完成,适用于所有的C/C++工程,下面介绍如果配置postgres源码工程。
调试postgres
配置postgres工程
这里以initdb为例演示调试过程。
配置launch.json
主要修改launch.json中的program
和 args
两项。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/usr/local/pgsql/bin/initdb",
"args": ["-D","/home/frank/pgdata/"],
"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
}
]
}
]
}
注意:
program 要设置为你的安装目录,我这里是/usr/local/pgsql/bin/initdb,如果是指向src下面编译出来的initdb会报错: *initdb: error: The program “postgres” is needed by initdb but was not found in thesame directory as “/home/frank/git/postgres/src/bin/initdb/initdb”.Check your installation. *报错原因是initdb会在它所在的目录下去启动postgres进程。
调试
在initdb.c中的main函数设置断点,并点击“运行和调试”窗口上访的gdb。
GDB设置
- 设置跟踪子进程:添加launch.json的配置。
"setupCommands": [
{
"text": "-gdb-set follow-fork-mode child"
}
]
- 在调试控制台窗口通过-exec 可以手动执行gdb命令