是否存在任何golang交互式调试器



标题很好地概括了这一点。我正在尝试Go,我真的很怀念能够在交互式环境中随心所欲地设置断点和进站/过站/出站。我知道我可以使用gdb来调试Go,但与使用可以插入gdb进行断点的IDE相比,这是相当烦人的。

我试着搜索一个,只能找到插件或小ide有语法高亮,但没有调试。

Update:就我个人而言,虽然GDB可以工作,但我不是一个在Go中使用它的粉丝,它会让你吐一些血。看看其他一些好的替代答案。


是的,当然:)

Go有一个调试器(GDB)

这是关于如何使用它的官方教程。

如果你喜欢"图形化调试"(即在编辑器中设置断点),一些ide允许你这样做(在后台使用GDB)。

具体来说,Eclipse、LiteIDE和Zeus都允许您设置断点并从编码环境(源代码)中进行调试。这里有一段视频教你如何使用宙斯。

GDB对go的支持有很多问题是go团队无法解决的。

有关更多信息,请阅读Rob Pike的帖子:

虽然我们将努力保持基本的gdb功能(栈)跟踪,打印值)在支持的平台上工作的能力使用调试器来了解Go程序的完整环境可能永远不会起作用,并且改进GDB支持也不是团队。

他们正在寻找其他调试选项,但目前还没有具体的计划。文档是过时的,runtime-gdb.py脚本随go 1.2而来不适用于使用python3支持编译的GDB(例如当前的Ubuntu)。

2017年更新:下面提到的godebug项目现在正式被derekparker/delve取代。


原始回答:

你现在(2015年3月)有另一种方法,基于检测代码。

mailgun/godebug :

godebug使用源代码代码生成来对程序进行调试调用
go tool cover对代码覆盖采取了类似的方法。

  • 当您运行godebug时,它会解析您的程序、检测函数调用、变量声明和语句行,并将结果代码输出到某个地方(当前要么是标准输出,要么是在原始文件之上)。
  • 当您运行这段修改后的代码时,假设您在某处放置了一个断点,您可以遍历它并检查变量。

稍后:计算任意Go表达式并写入变量。


2015年6月更新:

虽然它可能不像"一些人"希望的那样具有交互性,但它仍然是值得赞赏的(并且具有"步入"功能)。
参见"Go有一个调试器——它太棒了!"(Cloudfare)

这是很酷的一点:godebug重写了你的源代码,并在每行注入godebug.Line,在每个变量声明中注入godebug.Declare,在断点中注入godebug.SetTrace(即无论你在哪里输入_ = "breakpoint"),而不是与六个不同的ptrace接口进行角力。

我觉得这个办法太棒了。
您从中得到的是一个(可能是交叉编译的)启用调试的二进制文件,您可以像使用常规二进制文件一样将其放到登台服务器上。

当到达断点时,程序将内联停止并在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/...

UPDATE:

我已经检查过了,很高兴地报告,版本: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

它有点脆弱。就在我得到OSX登录提示符之后,交互式调试开始工作。有时,我必须调试一个简单的.go程序来启动它。但它确实有效,并且是我见过的最好的Go交互式调试体验。

原帖:

是否存在任何golang交互调试器?是的。

是否存在值得使用的golang交互式调试器?没有。

在mac上配置GDB是乏味的,但却是可行的。

然而,一旦你开始使用它,你很快就会意识到你只是在浪费时间安装它。

你甚至可以配置IntelliJ来使用它。

IntelliJ, LiteIDE, CGDB等似乎提供的唯一价值是,您可以更快地确定GDB对Go的调试支持非常差。

您可以使用它来逐步执行一些Go代码,但尝试打印除非常简单的变量值之外的任何值,您将浪费时间希望找到一个像样的调试器。

下面是一个示例,当您尝试使用CGDB打印map[string]字符串数据结构的值时会发生什么:

(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>

…这是完全没用的。

接下来,试试这个:

(gdb) print params["UserID"]

…你会看到"Bus error"

Delve (https://github.com/derekparker/delve)看起来很有前途,因为它是用Go编写的,但你使用控制台驱动它,而不是通过IDE。

我很乐意为企业版的IntelliJ(或任何其他IDE)付费,它做了一个体面的工作,支持Go中的交互式调试。

到目前为止,fmt.Printf("%v", variable)是最好的。

编辑

GO调试器现在是一个简单的插件在IntelliJ或PyCharm,不需要来安装其他东西。只需在插件中查找Go插件偏好。

原始答案(2015年11月)

查找截至2015年11月底的最新数据:

get delve

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
  1. 设置一个新的Go项目,或者导入一个项目。
  2. 根据提示设置您的Go SDK
  3. 设置你的Go库(通常在GOROOT/src中)
  4. 设置运行应用程序配置右上角的"播放"图标:
  5. Edit Configurations -> click + -> Go Application

定义要运行的包或文件。

设置完成后,Play图标和Debug图标现在应该是活动的,你可以设置断点,手表等…像往常一样。

Cheers

我很高兴地使用CGDB,一个围绕GDB的小诅咒包装。

  • 官方页面:cgdb - the curses debugger
  • 视频:使用CGDB在命令行上更容易调试
  1. 选项一- GDB https://golang.org/doc/gdb

  2. 探究

  3. Visual Studio Code与go插件(仍然使用delve)。

我个人使用选项3。你需要安装delve。

这个视频展示了实际的调试:https://youtu.be/uBjoTxosSys?t=16m11s(整个视频非常有趣)。

IDE DEBUG ON GO是可能的(再次),实际上工作!

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+调试器功能:设置断点,检查变量,单步执行。

这比为了调试代码而输出值要好得多。

我对Gogland (https://www.jetbrains.com/go/)非常满意,它基本上是支持Go的Intellij。它有一个工作的调试器,在开发过程中不断改进。我从2017年1月开始使用它,在2016年的MBP上,它对我来说基本上是稳定的。

Goland是JetBrains针对的一个新的商业IDE的代号为Go语言的开发提供符合人体工程学的环境。

最新更新