postgresql源码学习(26)—— Windows vscode远程调试Linux上的postgresql

本篇纪念小白第一次用开发工具调试源码成功~

       gdb使用命令行调试感觉还是有诸多不便,本来想简单点找找怎么直接调试Windows下的pg源码,找了半天只有用vs,太重而且步骤比较复杂。大多数实际环境还是运行在Linux的,所以最好还是调试Linux下的pg源码。

  • 目标端:centos 7+postgresql 14
  • 源端:Windows 10 + vscode

 

零、 特别提醒

在调试的过程中,有些操作可能会导致整个pg挂掉,小白们千万别在生产环境瞎跑。

一、 postgresql 14源码编译与安装

  •       之前写过pg用于调试的源码安装方法,这里是一样的(所以如果之前有装好可以就用这个环境)。特别要注意的就是编译的时候要加--enable-debug,不然是调试不了的。

postgresql源码学习(一)—— 源码编译安装与gdb调试入门_Hehuyi_In的博客-CSDN博客_postgresql 源码调试

       安装完之后试一下里面gdb调试的例子,因为后面的工具也会依赖gdb。如果执行没问题,就可以继续往下走了。

二、 安装vscode

下载链接:Visual Studio Code - Code Editing. Redefined

如果速度太慢,国内也有大量网站提供下载,安装过程下一步下一步即可。

1. 本地安装vscode插件

装下面3个:

  • C/C++
  • C/C++ Runner:编译、运行、debug
  • Remote Development:远程开发。它安装了三个插件:Remote-SSHRemote-ContainerRemote-WSL,如果只需要ssh连接,只装Remote-SSH就可以。

2. 测试远程连接

       在Remote Development插件装完后,左下角会多一个小电脑图标,点它,然后新建ssh连接。按照提示在框里填  ssh root@192.168.56.56

配好后点旁边的小加号,会弹出新界面让输密码

第一次进去的时候它会在远端服务器装vscode,会比较慢,它在/root下面创建一个隐藏目录vscode。

如果安装遇到报错 Resolver error: Error: XHR failed,有可能是网络问题,把linux上的.vscode目录删掉,重试几次即可。

    连接成功之后可以看到Linux的命令行

三、 配置远端调试pg

打开源码src目录,创建.vscode目录,以及launch.json文件。直接用Linux命令行也可以,通过vscode建也可以

launch.json文件内容如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "postgresql",
            "type": "cppdbg",
            "request": "attach",
            "program": "/data/postgres/base/14.4/bin/postgres",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
          ]
        }
    ]
}

唯一要改的地方是"program": "/data/postgres/base/14.4/bin/postgres",换成实际的路径。

另外远端vscode需要安装json插件,否则会报错不能解析该文件。

顺便看了下远端都装了哪些插件,除了json和C/C++ Extension Pack,其他貌似都是自动装的。

如果你遇到这个报错,说不能识别cppdbg,说明没有装C/C++ Runner插件,装上就可以。

四、远程调试测试

我们以最简单的begin操作为例,跟踪StartTransactionCommand函数执行情况。这个函数在 /root/postgresql-14.4/src/backend/access/transam/xact.c 文件中

vscode端:

找到xact.c 文件中的StartTransactionCommand函数,打上断点

linux端:

psql创建连接,查询进程号

select pg_backend_pid();

vscode端:

开始debug,快捷键F5

attach对应进程

会看到右下角有这样的输出

linux端:

执行一个begin命令,发现它会卡住

vscode端:

光标跳到了对应函数,说明已经开始调试了,可以点上面的小箭头,一步步看。

调试界面主要区域如下:

  • variable:每一步执行时对应的变量值,这个非常有用
  • call stack:调用栈,从下往上看
  • 代码中发光的那行是当前执行到的行

通过代码和变量值的对比,很容易看出下一步应该进哪个case,然后再执行什么。

至此,我们的调试测试就成功啦,迈出了pg源码学习万里长征的第一步~

五、 如何指定函数名设置断点

      一点小补充,像上面那样一点点找文件位置,再找函数位置打断点的方法虽然可行,但很麻烦,怎么样像gdb只要指定函数名就能设置断点呢?

 在最左下角会让输入函数名,另外还可以设置断点条件及命中次数才触发,这里我们暂时不用。

 打完断点后面启动调试步骤跟之前一样

 开始debug,快捷键F5

attach对应进程

Linux端随便执行一条insert语句,可以看到断点被触发

这样的话后面调试就方便多了。 

六、 全局搜索和查看源码

vscode打开源码目录

File -> Open Folder

Ctrl+Shift+F 快捷键或者点击左侧边栏中的放大镜图标,打开全局搜索界面,例如搜索RemoveStatistics函数

 

点击可以在右侧看到对应源码,上方的紫色小框是当前位置的上层函数

ctrl 点击该函数,可以跳转到源码定义

  

参考

https://blog.csdn.net/loveoobaby/article/details/123765071?spm=1001.2014.3001.5501

https://blog.csdn.net/loveoobaby/article/details/123766468

https://blog.csdn.net/Hehuyi_In/article/details/110729822

https://blog.csdn.net/Hehuyi_In/article/details/124524307

https://blog.csdn.net/wangyjfrecky/article/details/124681577

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: LinuxPostgreSQL远程权限方面是可以通过一系列配置来实现的。 首先,在Linux上,我们可以通过修改防火墙规则来控制对PostgreSQL服务器的远程访问权限。默认情况下,PostgreSQL的服务器监听5432端口,我们可以使用iptables或ufw命令来开放或关闭这个端口,限制远程访问的IP地址或IP段。 其次,在PostgreSQL的配置文件中,我们可以设置远程访问权限。通过编辑postgresql.conf文件,我们可以找到listen_addresses参数,该参数决定了服务器监听的IP地址。如果需要允许远程访问,我们可以将该参数设置为'*',表示接受来自任意IP地址的连接。 此外,还可以使用pg_hba.conf文件来配置访问控制规则。pg_hba.conf文件指定了客户端连接数据库时的身份验证规则。我们可以为不同的主机、用户和数据库设置不同的规则,以控制谁可以通过网络连接到PostgreSQL服务器。 在设置pg_hba.conf文件时,我们可以指定远程客户端的IP地址或IP段,访问数据库的用户名和密码,并设置具体的访问权限。例如,我们可以设置仅允许特定IP地址的用户以密码方式连接到特定数据库。 在完成以上配置后,我们还需要重启PostgreSQL服务器以使配置生效。通过这样的配置,我们可以针对不同的需求设置不同的远程访问权限,保障数据库的安全性。 总结起来,LinuxPostgreSQL提供了多种方式来实现远程访问控制,包括通过防火墙规则和PostgreSQL配置文件来限制对PostgreSQL服务器的远程访问权限。我们可以根据实际需求来进行相应的配置,以确保数据库的安全性和可访问性。 ### 回答2: 在Linux中,PostgreSQL是一种流行的关系型数据库管理系统,可以通过远程连接进行管理和操作。远程连接需要进行一些配置和授权才能实现。 首先,我们需要确保PostgreSQL服务器允许远程连接。在它的配置文件中,默认情况下,只允许本地连接。我们需要修改postgresql.conf文件,找到"listen_addresses"项,将其值设置为服务器的IP地址,或者设置为 "*",表示允许任何IP地址连接。 其次,我们需要为允许远程连接的用户设置权限。在pg_hba.conf文件中,可以找到用于控制连接访问权限的规则。我们添加一条规则,将远程客户端的IP地址、认证方法和访问权限设置为合适的值。例如,可以将以下内容添加到文件末尾: host all all 客户端IP地址/掩码 认证方法 访问权限 要注意的是,认证方法可以选择密码认证、身份证书认证等,根据实际情况选择合适的方式。访问权限可以设置为"trust"允许无需密码访问,或者"md5"要求输入密码进行认证。 最后,我们需要重启PostgreSQL服务以使配置生效。可以使用以下命令重启服务: sudo service postgresql restart 在完成上述配置后,我们就可以使用远程客户端连接到PostgreSQL服务器了。使用连接字符串指定服务器的IP地址、端口号、数据库名称、用户名和密码,即可成功连接。 需要注意的是,远程连接存在一定的安全风险。为了保障数据的安全性,我们应该限制允许连接的IP地址范围,使用安全的认证方法,并定期更新密码,以减少潜在的风险。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hehuyi_In

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

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

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

打赏作者

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

抵扣说明:

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

余额充值