是否存在任何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.Linegodebug.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 
  1. 设置一个新的Go项目,或者导入一个项目。
  2. 按照提示设置你的SDK
  3. 设置你的Go库(通常在GOROOT / src中
  4. 通过“播放”图标右上angular设置运行应用程序configuration:
  5. 编辑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代码更好。

  1. 选项一 – GDB https://golang.org/doc/gdb

  2. 钻研

  3. 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开发提供一个符合人体工程学的环境。