本文主要介绍如何通过window或者macos远程调试虚拟机的postges源码
安装pg13调试版本
安装调试版postgres13,此处忽略
安装vscode(window macos)
- 安装插件 Remote Development 插件
- 安装插件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,会被卸载远程的要调试的源码文件的位置
调试代码
- 进入psql
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
70663
(1 row)
- 新开一个窗口运行gdbserver
[pg13@sdw2 bin]$ gdbserver :2333 --attach 70663
Attached; pid = 70663
Listening on port 2333
-
打断点并进入调试模式(macos)
-
在会话中进行查询,并在源码中打断点
postgres=# select count(1) from t_pub;
....卡主
参考:https://warmgrid.github.io/2019/05/21/remote-debug-in-vscode-insiders.html