• 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):
    在这里插入图片描述

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

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

    选择连接
    在这里插入图片描述

    在这里插入图片描述

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

    选择要打开的远程程序的文件(虚拟机)
    连接成功后,后让你选择远程机器源码对应的文件夹
    在这里插入图片描述

    点击红色+号,则连接远程机器
    在这里插入图片描述

    展示源码
    在这里插入图片描述

    调试文件(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}",
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    几个注意的地方:

    • 应该是 “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
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 新开一个窗口运行gdbserver
    [pg13@sdw2 bin]$ gdbserver :2333 --attach 70663
    Attached; pid = 70663
    Listening on port 2333
    
    • 1
    • 2
    • 3
    1. 打断点并进入调试模式(macos)
      在这里插入图片描述
      在这里插入图片描述

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

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

    在这里插入图片描述

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

  • 相关阅读:
    STM32 HAL库 SPI主从机通信
    优盘中毒了怎么办?资料如何恢复
    小程序类找茬游戏开发:创造富有挑战性和娱乐性的游戏体验
    数字孪生与智慧城市:重塑未来城市生活的奇迹
    Android GLSurfaceView EGL_BAD_CONFIG 源码分析定位
    zookeeper——分布式理论知识,助你更好地理解分布式系统
    第十二章 磁盘管理
    苹果iPhone手机iOS16如何取消关闭复制粘贴时不停弹出的剪贴板粘贴提示通知弹窗?
    八、单臂路由实验
    通过kubernetes可视化界面(rancher)安装kibana
  • 原文地址:https://blog.csdn.net/wdnq1022/article/details/134397319