当前位置:网站首页>postgresql源码学习(26)—— Windows vscode远程调试Linux上的postgresql
postgresql源码学习(26)—— Windows vscode远程调试Linux上的postgresql
2022-07-01 07:54:00 【Hehuyi_In】
本篇纪念小白第一次用开发工具调试源码成功~
gdb使用命令行调试感觉还是有诸多不便,本来想简单点找找怎么直接调试Windows下的pg源码,找了半天只有用vs,太重而且步骤比较复杂。大多数实际环境还是运行在Linux的,所以最好还是调试Linux下的pg源码。
- 目标端:centos 7+postgresql 14
- 源端:Windows 10 + vscode
一、 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-SSH,Remote-Container,Remote-WSL,如果只需要ssh连接,只装Remote-SSH就可以。

2. 测试远程连接
在Remote Development插件装完后,左下角会多一个小电脑图标,点它,然后新建ssh连接。按照提示在框里填 ssh [email protected]

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

第一次进去的时候它会在远端服务器装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源码学习万里长征的第一步~
参考
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
边栏推荐
- 【R语言】年龄性别频数匹配 挑选样本 病例对照研究,对年龄性别进行频数匹配
- How do the top ten securities firms open accounts? In addition, is it safe to open a mobile account?
- Redisson uses the full solution - redisson official document + comments (Part 2)
- Android screen adaptation (using constraintlayout), kotlin array sorting
- Lm08 mesh series mesh inversion (fine)
- Redisson uses the complete solution - redisson official documents + Notes (Part 1)
- How relational databases work
- Redisson uses the full solution - redisson official documents + comments (Part 2)
- redisson看门狗机制,redisson看门狗性能问题,redisson源码解析
- Li Kou daily question - Day 32 -1822 Symbol of array element product
猜你喜欢

The H5 page has set the font thickness style, but the wechat access style in Huawei mobile phone doesn't take effect?

Caesar

凸印的印刷原理及工艺介绍

Thesis learning -- Analysis and Research on similarity query of hydrological time series
![[batch dos-cmd command - summary and summary] - Common operators in the CMD window (<, < <, & <,>, > >, & >, & >, & &, ||, (),;, @)](/img/48/de19e8cc007b93a027a906d4d423b2.png)
[batch dos-cmd command - summary and summary] - Common operators in the CMD window (<, < <, & <,>, > >, & >, & >, & &, ||, (),;, @)

Todolist classic case ①

2022 test questions and mock examinations for main principals of hazardous chemicals business units

Redisson uses the full solution - redisson official document + comments (Part 2)

2022 Guangdong Provincial Safety Officer a certificate third batch (main person in charge) special operation certificate examination question bank simulated examination platform operation

Array: question brushing record
随机推荐
2022 Guangdong Provincial Safety Officer a certificate third batch (main person in charge) special operation certificate examination question bank simulated examination platform operation
2022 test questions and mock examinations for main principals of hazardous chemicals business units
Teach you how to apply for domestic trademark online step by step
Discussion on several research hotspots of cvpr2022
Missing API interface actual development series (14): ID card real name authentication verification
redisson看门狗机制,redisson看门狗性能问题,redisson源码解析
[MySQL learning notes 26] view
Huawei modelarts training alexnet model
web254
How to create an exclusive vs Code theme
[MySQL learning notes27] stored procedure
Introduction to kubernetes resource objects and common commands (II)
QT -- 1. QT connection database
力扣每日一题-第31天-202.快乐数
【批处理DOS-CMD命令-汇总和小结】-Cmd窗口中常用操作符(<、<<、&<、>、>>、&>、&、&&、||、|、()、;、@)
Inftnews | from "avalanche" to Baidu "xirang", 16 major events of the meta universe in 30 years
力扣——求一组字符中的第一个回文字符
go通用动态重试机制解决方案的实现与封装
matlab保存DB4i深度相机图片
[website architecture] solve 90% of distributed transactions in one move, and introduce the working principles and application scenarios of database transactions and distributed transactions