云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站空间_申请企业邮箱要钱吗_优惠

小七 141 0

Go有一个调试器,非常棒!

经常,呃。。。bug[1]Go开发人员缺乏合适的调试器。当然,构建速度快得惊人,而且容易打印(十六进制转储(b) )是您的朋友,但有时最好只设置一个断点,然后逐步执行无休止的if链或打印一堆值而不重新编译十次。Carl Milner的CC BY 2.0图像你可以尝试使用一些肮脏的gdb黑客,如果你用一个特定的链接器构建你的二进制文件,并在一些架构上运行它,当月亮处于新月形的阶段时,你可以尝试使用一些肮脏的gdb黑客,但老实说,这不是一个愉快的体验。好吧,别担心了!哥德巴克来了!godebug是由Mailgun团队创建的一个很棒的跨平台调试器。您可以阅读他们的介绍了解一些隐藏的细节,但这里有一个很酷的地方:godebug重写您的源代码并注入函数调用,比如戈德巴克线在每一条线上,哥德伯格,申报每次声明变量时,以及godebug.SetTrace在任何地方输入断点。我觉得这个解决方案很好。从中得到的是一个(可能是交叉编译的)支持调试的二进制文件,您可以像使用常规二进制文件一样将其放到临时服务器上。当到达断点时,程序将停止内联并在stdin上等待您。这是我们喜欢的用于调试的Go的单一二进制、零依赖哲学。在任何地方构建,在任何地方运行,不需要在服务器上使用工具或权限。它甚至可以用gopherjs编译成JavaScript(查看上面的showoffs上面的Mailgun帖子;)。您可能会问,"但是它是否获得了一个像样的运行时速度或与大型应用程序一起工作?"好吧,前几天我看到RRDNS我们的内部Go-DNS服务器遇到了一个奇怪的分支,所以我在有问题的if上面放置了一个断点,用godebug工具重新编译了整个RRDNS,将二进制文件放到了一个临时服务器上,并回放了一些DNS流量。菲利波@舞台:~$./rrdns-配置配置.json->"断点"(哥德巴克)lq:=r。询问。问题[0]-->"断点"如果!支持isQtypeSupported(q.Qtype){返回(戈德巴克)n->如果!支持isQtypeSupported(q.Qtype){(哥德巴克)qdns.问题{名称:"菲利波.io.", 数量类型:0x1, Q等级:0x1}(哥德巴克)c繁荣。请求和调试日志暂停(确保终止工具中的任何超时),等待我逐步完成代码。卖了吗?使用方法如下:只需运行godebug{build|run|test}而不是go{build|run|test}。我们调整了godebug,使之尽可能的像go工具。记住使用-instrument,如果你想进入不是main的包。例如,以下是RRDNS Makefile的一部分:银行标识代码(bin/rrdns):哥德巴克GOPATH="${PWD}"开始安装github.com/mailgun/godebugGOPATH="${PWD}"。/bin/godebug build-instrument"${godebug}"-o bin/rrdns rrdns其他的GOPATH="${PWD}"去安装rrdns结束语测试:哥德巴克GOPATH="${PWD}"开始安装github.com/mailgun/godebugGOPATH="${PWD}"。/bin/godebug test-instrument"${godebug}"rrdns/。。。其他的GOPATH="${PWD}"去测试rrdns/。。。结束语调试只是一个make bin/rrdns GODEBUG=rrdns/。。。走开。这个工具还很年轻,但以我的经验来看,功能完善。如果你能抽出点时间的话,用户体验可以使用一些爱(正如你在上面看到的,它相当斯巴达),但它应该很容易建立在已经存在的基础上。关于源代码重写在结束之前,我想说几句关于重写源代码的技巧。它支持许多不同的Go工具,如测试覆盖、模糊化和调试。这主要是由于Go的快速编译而实现的,而且它使惊人的跨平台工具能够轻松构建。然而,由于它是一个非常方便和强大的模式,我觉得应该有一个标准的方法来将它应用到构建过程的上下文中。毕竟,所有的源代码重写工具都需要实现以下功能的子集:包装主函数有条件地重写源文件保持全局状态为什么每个工具都要重新创建所有的样板文件来复制源文件、重写源代码、确保不使用过时的对象、构建正确的包、运行正确的测试以及解释CLI。。?基本上,所有的godebug/命令行. 比如说gb呢?我认为我们需要一个框架来实现源代码重写工具。(扰流板、扰流板等)如果你有兴趣在大规模的Go服务器上工作并开发工具来做得更好,请记住我们正在伦敦、旧金山和新加坡招聘!我很抱歉。↩︎