在 Windows 下调试 TiDB4PG 的填坑实记
作者: 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.io
或goproxy.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。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/65187b4ece1210b7df59d4e21】。文章转载请联系作者。
评论