使用vscode调试postgres源码

摘要

之前看过关于使用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中的programargs 两项。

{
    // 使用 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命令

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏 克

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

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

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

打赏作者

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

抵扣说明:

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

余额充值