写点什么

在 Windows 下调试 TiDB4PG 的填坑实记

  • 2022 年 7 月 11 日
  • 本文字数:1533 字

    阅读完需:约 5 分钟

作者: hey-hoho 原文来源:https://tidb.net/blog/47f83a5a


花了两天时间总算把各个坑填完了,又能愉快的用 Visual Code 调试 TiDB4PG 了,中间的酸爽还是得从头开始讲起。



我们从第一个问题开始讲起,也是这一连串令人头秃的开始。大家应该都知道,从 Windows10 开始有了 Windows subsystem for Linux 功能,在 Windows 下也能像在 Mac 和 Linux 下一样开发 Linux 系统上的软件,原本需要虚拟机装双系统都成了历史,可是………故事总会有可是,不然也就算不上是个有趣的故事。


我们先看一下这个帖子https://github.com/microsoft/WSL/issues/5382,也就是 curl 命令在 wsl2 某种状态下无法抓取网络数据,我就是那个悲催的靓仔,遇到了这个情况,在 make dev 编译 tidb4pg 的时候无法抓取 golangci-lint,随即试了 curl www.baidu.com -I,真是一点数据都没有,就开始按照帖子的方法解决这个恼人的问题,可是……. 又来一个可是,电脑完全整趴下了,无线有线所有网络连接全都失效,变成完全无法上网的状态了,只能采用重装大法了。


一顿 reset 之后,一切都似乎恢复原样了,重装还是有帮助的,至少 curl www.baidu.com -I 出现了获取成功的信息,那就继续我们开发调试工作吧。



接下来马上进入第二个绝望环节,无法调试 tidb4pg……


要知道 tidb 的 make dev 一堆命令参数只能适用在 linux 下,所以我们把 tidb4gp 代码 clone 到 wsl 上也非常合适,git clone


这里快速忽略环境配置的其他细节,比如 goproxy 可以参考gorpoxy.iogoproxy.cn,go version < 1.6 不然会有编译问题(https://github.com/golang/go/issues/44129),从帖子上看应该是放弃治疗直接靠 1.7 解决这个问题了。


为了开发效率,我们还在 Windows 上安装了 VS code 和 Remote Development 插件(https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)



似乎一切都会完美的接故事开头的工作继续完成剩下的任务,但是……vs code 调试 wsl 上的 tidb4pg 时候,系统返回给我一个无法接受的错误,dlv-dap 只能同一个用户链接,难道是我 windows 的账号和 wsl 的账号不一致导致的?确实原来我也没注意这个问题,那只能继续再来一遍重装大法,心里是极度的奔溃。这次账号名都设置成一样,不过最后还是这个错误,当时有点懵了。



后来花了一个下午的时间,翻遍了所有搜索引擎关于 dlv 相关的内容,在接近绝望的边缘时候,突然看到一句 wsl 2 可以支持远程调式这么一句话。


赶紧看一下现在 wsl 的版本,一种被闪电突然劈中的感觉,一整天的坑都是这个原因导致的,确实原来系统都是改成 wsl2 本版,所以调试都没有问题,这次系统重装后默认还是 wsl1 版本,所以怎么 debug 都无法正常。



既然问题找到了,那就开始解决吧。



在 wsl 项目里启动 vs code,确保 vs code 左下角正常显示 wsl 链接信息。



配置好 launch.json,就可以点击运行按钮调试了,可以看到 tidb 启动过程的 log 都能正确的输出到 DEBUG Console 里,一下子宽心很多。



最后一步,我们尝试一下 windows 的 psql client 链接 wsl 下的 tidb4pg,并能捕捉到 sql query 请求。


下载安装 PostgreSQL,这里我们只需要 Command Line Tools,不需要整个 pg 数据库。



然后在项目的 conn.go 文件内找到 handleQuery 函数,在第一行加上断点,这里是最先接受 query 的地方。通过在 psql 内执行 delete from t1 where a=1 returning *; 这样一句 DML,触发刚刚设置的断点,可以在左边变量窗口里看到我们输入的 sql。到此开发环境的问题都解决了,又能进行 TiDB for PostgreSQL 的 Hacking Camp 的任务了,我们已经把计划任务都放到 Issue 里面,如果您感兴趣的话可以来围观一下,https://github.com/DigitalChinaOpenSource/TiDB-for-PostgreSQL/issues。



发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
在Windows下调试TiDB4PG的填坑实记_TiDB 社区干货传送门_InfoQ写作社区