在Windows下调试TiDB4PG的填坑实记

花了两天时间总算把各个坑填完了,又能愉快的用Visual Code调试TiDB4PG了,中间的酸爽还是得从头开始讲起。
image
我们从第一个问题开始讲起,也是这一连串令人头秃的开始。大家应该都知道,从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出现了获取成功的信息,那就继续我们开发调试工作吧。
image
接下来马上进入第二个绝望环节,无法调试tidb4pg……

要知道tidb的make dev一堆命令参数只能适用在linux下,所以我们把tidb4gp代码clone到wsl上也非常合适,git clone git@github.com:DigitalChinaOpenSource/TiDB-for-PostgreSQL.git

这里快速忽略环境配置的其他细节,比如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)
image
似乎一切都会完美的接故事开头的工作继续完成剩下的任务,但是……vs code调试wsl上的tidb4pg时候,系统返回给我一个无法接受的错误,dlv-dap只能同一个用户链接,难道是我windows的账号和wsl的账号不一致导致的?确实原来我也没注意这个问题,那只能继续再来一遍重装大法,心里是极度的奔溃。这次账号名都设置成一样,不过最后还是这个错误,当时有点懵了。
image
后来花了一个下午的时间,翻遍了所有搜索引擎关于dlv相关的内容,在接近绝望的边缘时候,突然看到一句wsl 2可以支持远程调式这么一句话。

赶紧看一下现在wsl的版本,一种被闪电突然劈中的感觉,一整天的坑都是这个原因导致的,确实原来系统都是改成wsl2本版,所以调试都没有问题,这次系统重装后默认还是wsl1版本,所以怎么debug都无法正常。
image
既然问题找到了,那就开始解决吧。
image
在wsl项目里启动vs code,确保vs code左下角正常显示wsl链接信息。
image
配置好launch.json,就可以点击运行按钮调试了,可以看到tidb启动过程的log都能正确的输出到DEBUG Console里,一下子宽心很多。
image
最后一步,我们尝试一下windows的psql client链接wsl下的tidb4pg,并能捕捉到sql query请求。

下载安装PostgreSQL,这里我们只需要Command Line Tools,不需要整个pg数据库。
image
然后在项目的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。
image

1赞

前排围观:+1: