vscode + gdb +gdbserver 远程调试Pg源码

本文主要介绍如何通过window或者macos远程调试虚拟机的postges源码

安装pg13调试版本

安装调试版postgres13,此处忽略

安装vscode(window macos)

  1. 安装插件 Remote Development 插件
  2. 安装插件C/C++

安装gdb gdbserver(远程虚拟机)

yum install gdb
yum install gdb-gdbserver

使用 VSCode 远程访问代码

VSCode 的官方扩展“Remote Development” 可以直接走 ssh 协议访问远程文件,输fn+f1(macos):
vscode + gdb +gdbserver 远程调试Pg源码_第1张图片

输入连接信息
在这里插入图片描述

点击下面的config,可以查看连接信息的配置文件
在这里插入图片描述

选择连接
vscode + gdb +gdbserver 远程调试Pg源码_第2张图片

vscode + gdb +gdbserver 远程调试Pg源码_第3张图片

首次连接会多次要求输入密码, 成功后界面左下角会有 SSH: 的已连接状态, 同时这个 VSCode 也变成了该远程连接的专属实例.

选择要打开的远程程序的文件(虚拟机)
连接成功后,后让你选择远程机器源码对应的文件夹
vscode + gdb +gdbserver 远程调试Pg源码_第4张图片

点击红色+号,则连接远程机器
vscode + gdb +gdbserver 远程调试Pg源码_第5张图片

展示源码
vscode + gdb +gdbserver 远程调试Pg源码_第6张图片

调试文件(macos)

在 VSCode机器上, 进入菜单 调试 -> 添加配置, 会生成一个配置文件 SSH之后的项目根目录/.vscode/launch.json, 将其修改如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb Remote Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/pg13/bin/postmaster",
            "args": [],
            "stopAtEntry": true,
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb",
            "miDebuggerArgs": "gdb",
            "linux": {
                "MIMode": "gdb",
                "miDebuggerPath": "/usr/bin/gdb",
                "miDebuggerServerAddress": "172.16.1.6:2333",
            },
            "logging": {
                "moduleLoad": false,
                "engineLogging": false,
                "trace": false
            },
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "cwd": "${workspaceFolder}",
        }
    ]
}

几个注意的地方:

  • 应该是 “request”: “launch”, 不是 “attach”, 此后也并不需要记录进程ID
  • 需要填对 “miDebuggerServerAddress”: “172.16.56.144:2333”, 有这个设置才会开启 gdb 远程调试
  • “engineLogging”: true 可以看到 gdb 自身的详细消息
  • 必须是 “externalConsole”: false 否则报错
  • /path/to/myprogram 应该是在 gdbserver 和 launch.json 里都要填一次

注意:这个文件/postgres-REL_13_2/.vscode/launch.json,会被卸载远程的要调试的源码文件的位置

调试代码

  1. 进入psql
postgres=# select pg_backend_pid();
 pg_backend_pid 
----------------
          70663
(1 row)

  1. 新开一个窗口运行gdbserver
[pg13@sdw2 bin]$ gdbserver :2333 --attach 70663
Attached; pid = 70663
Listening on port 2333
  1. 打断点并进入调试模式(macos)
    vscode + gdb +gdbserver 远程调试Pg源码_第7张图片
    vscode + gdb +gdbserver 远程调试Pg源码_第8张图片

  2. 在会话中进行查询,并在源码中打断点

postgres=# select count(1) from t_pub;
....卡主

vscode + gdb +gdbserver 远程调试Pg源码_第9张图片

参考:https://warmgrid.github.io/2019/05/21/remote-debug-in-vscode-insiders.html

你可能感兴趣的:(postgresql)