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

news/2024/7/9 19:58:31 标签: postgresql

本文主要介绍如何通过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}",
        }
    ]
}

几个注意的地方:

  • 应该是 “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)
    在这里插入图片描述
    在这里插入图片描述

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

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

在这里插入图片描述

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


http://www.niftyadmin.cn/n/5179063.html

相关文章

Google多开浏览器:更安全地多任务同时操作

我们经常会面临多个任务同时进行的情况,尤其是管理多个账号。为了提高工作效率和确保账号安全,推荐使用Google多开的浏览器。这种强大的浏览器工具不仅可以同时登陆大量账号,还能保证账号的绝对安全,防止关联,并提供多…

云管理平台与容器

对于云管理平台与容器云的共性和区别,当前一般认为容器云是PaaS。容器云是IaaS和Paas融合体,不仅仅是PaaS。因为容器云不仅仅处理了面向应用部署的容器编排,同时解决的问题也包括给容器分配资源、网络和存储的问题。二者共性是都面向应用的研…

Linux 下 使用 Ekho 进行TTS文本转语音

官网 http://www.eguidedog.net/cn/index.phpEkho(余音)是一个免费、开源的中文语音合成软件。支持普通话、粤语。支持Linux、Windows和Android平台。 资源:https://download.csdn.net/download/weixin_44618297/88529881 参考&#xff1a…

vue3 中的ref、reactive的介绍

reactive: 当使用reactive()处理数据后,数据再次被使用时,就会进行依赖收集 当数据发生改变时,所有收集到的依赖进行对应的响应式操作(如:更新界面), 事实上,我们编写的d…

嵌入式软件开发要注意这七种错误!

软件行业的工作经验和你从事这个行业的工作年限直接相关。 这句话在某种程度上是对的,但是你从事这项工作的年限,并不一定代表你获得了相同年限的工作经验,正如一句话所说:“我们以为我们是工作了十年,其实却只有一年…

软件工程理论与实践 (吕云翔) 第三章 可行性研究及需求分析课后习题及答案

第三章 可行性研究及需求分析 知识点: ​ 任何一个完整的软件工程项目都是从项目立项(可行性研究)开始的。项目立项包括项目发起、项目论证、项目审核和项目立项4个过程。 一般来说,需求分析分为需求获取、分析建模、需求描述和…

javafx-启动main时获取pid,关闭windows窗口时杀掉pid

有时候发现,关掉了窗口,但是发现进程列表里面还有这个进程,因此在关闭的时候在kill一次代码可以参考 package sample.main;import javafx.application.Application; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; impo…

Spring Boot项目优雅实现读写分离

文章目录 1. 读写分离简介2. Spring Boot集成MyBatis3. 配置读写分离数据源4. 定义数据源上下文5. 自定义注解和切面6. 在Service层使用注解7. 拓展与分析7.1 多数据源的选择7.2 事务的处理7.3 异常处理7.4 动态数据源切换7.5 Spring Boot版本适配 🎉欢迎来到架构设…