是否存在任何golang交互式debugging器?
标题几乎总结了它。 我正在尝试Go,我真的很想在一个交互式的环境中尽可能地设置断点和进/出/出。 我知道我可以使用gdb来debuggingGo,但是与使用可以插入到gdb中的breakpointing的IDE相比,这非常烦人。
我试图寻找一个,只能find插件或小的IDE有语法突出显示,但没有debugging。
更新 :就个人而言,虽然GDB的作品,我不是在Go使用它的粉丝,它会让你吐血。 检查一些其他的答案,为好的select。
当然是 :)
Go有一个debugging器(GDB)
这里是关于如何使用它的官方教程 。
如果你想要“graphics化debugging”(也就是在编辑器中设置断点),一些IDE可以让你做到这一点(在后台使用GDB)。
具体来说,Eclipse,LiteIDE和Zeus都可以让您设置断点并从您的编码环境(源代码)进行debugging。 这里是一个关于如何与宙斯做的video 。
GDB对go的支持有很多问题不会被go团队解决。
欲了解更多信息,请阅读Rob Pike的post :
尽pipe我们将尽力保持在支持平台上工作的基本gdbfunction(堆栈跟踪,打印值),但使用debugging器来理解Go程序的完整环境的能力可能永远不会工作,并且改善gdb支持对于团队来说不是优先考虑的。
他们正在寻找其他的debugging选项,但现在还没有具体的计划。 这个文档已经过时了,go-1.2的runtime-gdb.py
脚本对于用python3编译的GDB(比如当前的Ubuntu)不起作用。
2017年更新:下面提到的godebug项目现在正式由derekparker / delve取代。
原始答案:
你现在(2015年3月)有另一种方法,基于编码的代码。
mailgun / godebug :
godebug
使用源代码生成来debugging你的程序 。
go tool cover
采取类似的方法来代码覆盖。
- 当你运行
godebug
,它会parsing你的程序,仪器函数调用,variables声明和语句行,并将结果代码输出到某个地方(目前是标准输出或原始文件)。- 当你运行这个修改后的代码时,假设你在某处放置了一个断点,你可以通过它来检查variables。
稍后介绍:评估任意的Goexpression式并写入variables。
2015年6月更新:
虽然它可能不像“某些”可能希望的那样具有互动性,但它仍然被赞赏(并且已经“进入”特征 )。
请参阅“ Go有一个debugging器 – 它太棒了! ”(Cloudfare)
这里有一个很酷的地方:
godebug
不是用godebug
不可移植的ptrace
接口来摔跤,godebug
重写你的源代码并注入函数调用,比如godebug.Line
,godebug.Declare
,每个variables声明和godebug.SetTrace
为断点(即无论你键入_ = "breakpoint"
)。我觉得这个解决scheme很棒。
你从中得到的是一个(可能是交叉编译的)启用debugging的二进制文件,你可以把它放在登台服务器上,就像使用普通的二进制文件一样 。当达到断点时,程序将停止内联并等待你的stdin。
Go是我们爱用于debugging的单二进制,零依赖关系的哲学。 随处构build,到处运行,不需要服务器上的工具或权限。
ifdef GODEBUG GOPATH="${PWD}" go install github.com/mailgun/godebug GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns
debugging只是
make bin/rrdns GODEBUG=rrdns/...
远离。
更新:
我已经检查出来,很高兴地报告版本:2016.1.3,生成:145.1617.8,发布:2016年6月5日与Delve合作! 你可以在这里下载: https : //www.jetbrains.com/idea/download/ 。 另请参阅Delve安装说明: https : //github.com/derekparker/delve/tree/master/Documentation/installation
这有点片。 在获得OSXlogin提示后,交互式debugging开始工作。 有时,我必须debugging一个简单的.go程序来启动它。 但它确实有效,是我见过的Go中最好的交互式debugging体验。
原来的post:
是否存在任何golang交互式debugging器? 是。
是否存在任何值得使用的golang交互式debugging器? 没有。
在Mac上configurationGDB是单调乏味的,但是可行。
但是,一旦你开始使用它,你很快就会意识到,你只是浪费你的时间安装它。
你甚至可以configurationIntelliJ来使用它。
IntelliJ,LiteIDE,CGDB等提供的唯一价值就是您可以更快地确定GDB对Go的debugging支持极其糟糕。
你可以使用它来遍历一些Go代码,但是尝试打印除了非常简单的variables值以外的任何值,并且会浪费你的时间,希望得到一个体面的debugging器。
下面是一个使用CGDB打印map [string]string数据结构的值的例子:
(gdb) print params $1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>
…这是完全无用的。
接下来,试试这个:
(gdb) print params["UserID"]
…你会得到“巴士错误”。
Delve( https://github.com/derekparker/delve )看上去很有希望,因为它是用Go编写的,但是你可以使用控制台来驱动它,而不是通过IDE。
我很乐意为在Go上支持交互式debugging的IntelliJ企业版(或任何其他IDE)付出代价。
到目前为止, fmt.Printf("%v", variable)
大致如此。
编辑
GOdebugging器现在是IntelliJ或PyCharm中的一个简单插件,不需要安装其他任何东西。 只需在插件首选项中查找Go插件即可。
原始答案(2015年11月)
对于截至2015年11月底的最新消息:
得到钻研
https://github.com/derekparker/delve
并遵循构build/设置说明:
https://github.com/derekparker/delve/wiki/Building
获取最新的IntelliJ(15)或PyCharm(5)
https://www.jetbrains.com/idea/download/
并在您select的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项目,或者导入一个项目。
- 按照提示设置你的SDK
- 设置你的Go库(通常在GOROOT / src中
- 通过“播放”图标右上angular设置运行应用程序configuration:
- 编辑configuration – >点击+ – >去应用程序
定义你的软件包或文件来运行。
一旦完成设置,Play图标和Debug图标现在应该处于活动状态,您可以像往常一样设置断点,手表等。
干杯
我很高兴地使用CGDB,一个围绕GDB的小诅咒包装。
- 官方网页: cgdb – cursesdebugging器
- video: 更简单使用CGDB在命令行上进行debugging
IDEdebugging是可能的(再次),实际上工作 !
Delve在Mac OS X上工作得非常好,并且受到IntelliJ IDEA Go Lang插件的支持 。
我在Mac OSX上testing了IntelliJ Idea 14,Go 1.5.1,Delve 0.5
我不得不通过创build自签名证书的常见循环,将其添加到系统环等(为了在Mac OS X中运行debugging器,这是必需的)。 最后,我在IntelliJ中设置了一个GO项目,并在重新获得通常的IDE +debugging器function时进行了偿还:设置断点,检查variables,单步执行。
这比打印出值来debugging代码更好。
-
选项一 – GDB https://golang.org/doc/gdb
-
钻研
-
Visual Studio的代码与它的插件 (仍然使用钻石)。
我个人使用选项3.对于它,你将需要安装钻石 。
这个video显示了debugging的实际情况: https : //youtu.be/uBjoTxosSys?t=16m11s (整个video非常有趣)。
我对Gogland( https://www.jetbrains.com/go/ )非常满意,它基本上是支持Go的Intellij。 它有一个工作的debugging器,随着他们一直在开发这个function,他们越来越好。 自2017年1月份以来我一直在使用它,2016年MBP对我来说已经基本稳定。
Gogland是JetBrains新的商业IDE的代号,旨在为Go开发提供一个符合人体工程学的环境。