标题几乎总结了它.我正在尝试Go,我真的很想能够在交互式环境中设置断点并在我想要的内容中进/出.我知道我可以使用gdb来调试Go,但与使用可以插入gdb进行断点操作的IDE相比,这是非常烦人的.
我尝试搜索一个,只能找到具有语法高亮但没有调试的插件或小型IDE.
更新:就个人而言,虽然GDB工作,但我不喜欢在Go中使用它,它会让你吐出一些血.查看其他一些好的替代方案的答案.
当然是 :)
Go有一个调试器(GDB)
这是关于如何使用它的官方教程.
如果您想要"图形调试"(即在编辑器中设置断点),某些IDE可以让您这样做(在后台使用GDB).
具体而言,Eclipse,LiteIDE和Zeus都允许您从编码环境(源代码)设置断点和调试.这是一个关于如何使用Zeus的视频.
GDB对go的支持有很多问题,go团队无法修复.
有关更多信息,请阅读Rob Pike的帖子:
虽然我们将努力保持在支持的平台上运行的基本gdb功能(堆栈跟踪,打印值),但是使用调试器来理解Go程序的完整环境的能力可能永远不会起作用,并且改进gdb支持不是团队的优先事项.
他们正在寻找其他调试选项,但目前还没有具体的计划.文档已经过时,并且runtime-gdb.py
随附的1.2脚本对于使用python3支持编译的GDB(例如当前的Ubuntu)不起作用.
2017年更新:下面提到的godebug项目现在由derekparker/delve正式取代.
原始答案:
您现在(2015年3月)有另一种方法,基于检测代码.
mailgun/godebug:
godebug
使用源代码生成来通过调试调用来检测程序.
go tool cover
采用类似的方法来代码覆盖.
当您运行时
godebug
,它会解析您的程序,仪器函数调用,变量声明和语句行,并在某处输出结果代码(当前是stdout或原始文件的原位).当您运行此修改后的代码时,假设您在某处放置了断点,您可以单步执行它并检查变量.
稍后:评估任意Go表达式并写入变量.
2015年6月更新:
虽然它可能不像"某些"希望的那样具有互动性,但它仍然受到赞赏(并且具有"进入"功能).
请参阅" Go有一个调试器 - 它太棒了! "(Cloudfare)
这是很酷的一点:而不是与六个
ptrace
不可移植的不同接口进行摔跤,godebug
重写你的源代码并godebug.Line
在每一行,godebug.Declare
每个变量声明和godebug.SetTrace
断点(即你键入的任何地方_ = "breakpoint"
)注入函数调用.我发现这个解决方案很棒.
您从中获得的是一个(可能是交叉编译的)启用调试的二进制文件,您可以将其放在登台服务器上,就像使用常规二进制文件一样.当达到断点时,程序将停止内联并在stdin上等待你.
这是我们喜欢用于调试的Go的单二进制,零依赖性哲学.随处可构建,无处不在,无需服务器上的工具或权限.
ifdef GODEBUG GOPATH="${PWD}" go install github.com/mailgun/godebug GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns
调试只是一个问题
make bin/rrdns GODEBUG=rrdns/...
.
更新:
我已经检查过了,很高兴地报告该版本:2016.1.3,Build:145.1617.8,已发布:2016年6月5日与Delve合作!您可以在此处下载:https://www.jetbrains.com/idea/download/.另请按照Delve安装说明进行操作:https://github.com/derekparker/delve/tree/master/Documentation/installation
它有点片状.在我收到OSX登录提示后,交互式调试开始工作.有时,我必须调试一个简单的.go程序来启动它.但它确实有效,并且是我见过的最好的Go互动调试体验.
原始邮寄:
是否存在任何golang交互式调试器?是.
是否存在值得使用的golang交互式调试器?没有.
在Mac上配置GDB很繁琐,但可行.
但是,一旦你开始使用它,你很快就会意识到你只是浪费了你的时间来安装它.
您甚至可以配置IntelliJ来使用它.
IntelliJ,LiteIDE,CGDB等似乎提供的唯一值是,您可以更快地确定Go的GDB调试支持非常差.
您可以使用它来逐步执行一些Go代码,但尝试打印除非常简单的变量值之外的任何值,您将浪费时间来寻找一个体面的调试器.
下面是当您尝试使用CGDB打印map [string]字符串数据结构的值时会发生什么的示例:
(gdb) print params $1 = (github.com/go-martini/martini.Params) 0x15582
......完全没用.
接下来,试试这个:
(gdb) print params["UserID"]
...而且你会得到"总线错误".
Delve(https://github.com/derekparker/delve)看起来很有前途,因为它是用Go编写的,但你使用控制台驱动它,而不是通过IDE驱动它.
我很乐意支付IntelliJ(或任何其他IDE)的企业版,它支持Go中的交互式调试.
到目前为止,fmt.Printf("%v", variable)
它的效果和它一样好.
编辑
GO调试器现在是IntelliJ或PyCharm中的一个简单插件,无需安装任何其他东西.只需在插件首选项中查找Go插件即可.
原始答案(2015年11月)
对于那些寻找最新截至2015年11月底的人:
得到钻石
https://github.com/derekparker/delve
并按照构建/设置说明操作:
https://github.com/derekparker/delve/wiki/Building
获取最新的IntelliJ(15)或PyCharm(5)
https://www.jetbrains.com/idea/download/
并在您选择的IDE中获取go-lang-plugin:
Pycharm -> Preference -> plugins -> search for go current version is Version: 0.10.749 IntelliJ -> Preference -> plugins -> search for go current version is Version: 0.10.749
设置新的Go项目,或导入项目.
根据提示设置你Go SDK
设置你的Go库(通常在GOROOT/src中
通过"播放"图标在右上角设置"运行应用程序"配置:
编辑配置 - >单击+ - >转到应用程序
定义要运行的包或文件.
完成设置后,Play图标和Debug图标现在应该处于活动状态,您可以像往常一样设置断点,监视等.
干杯
我很高兴使用CGDB,一个围绕GDB的小诅咒包装器.
官方页面:cgdb - curses调试器
视频:使用CGDB在命令行上轻松调试
IDE调试是可能的(再次),实际工作!
Delve在Mac OS X上运行得相当好,并且由IntelliJ IDEA Go Lang插件支持.
我在Mac OSX上测试过,IntelliJ Idea 14,Go 1.5.1,Delve 0.5
我必须通过创建自签名证书的常规循环运行,将其添加到系统环等(为了在Mac OS X中运行调试器而需要).最后,我在IntelliJ中设置了一个GO项目,并在重新获得通常的IDE +调试器功能时得到了回报:设置断点,检查变量,单步执行.
这比打印输出值更好,以便调试代码.
方案一 - GDB https://golang.org/doc/gdb
钻研
Visual Studio Code及其go插件(仍然使用delve).
我个人使用选项3.为此你需要安装钻孔.
此视频显示了调试的实际操作:https://youtu.be/uBjoTxosSys?t = 16m11s(整个视频非常有趣).