85

标题几乎概括了它。我正在尝试 Go,我真的很怀念能够在交互式环境中尽可能多地设置断点和步入/越过/退出。我知道我可以使用 gdb 来调试 Go,但与使用可以插入 gdb 进行断点的 IDE 相比,这非常烦人。

我尝试搜索一个,但只能找到具有语法突出显示但没有调试的插件或小型 IDE。

4

9 回答 9

38

更新:就个人而言,虽然 GDB 可以工作,但我不喜欢在 Go 中使用它,它会让你吐血。查看其他一些答案以获得好的替代方案。


是的当然 :)

Go 有一个调试器(GDB)

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

如果您想要“图形调试”(即在编辑器中设置断点),一些 IDE 允许您这样做(在后台使用 GDB)。

具体来说,Eclipse、LiteIDE 和 Zeus 都允许您从编码环境(源代码)设置断点和调试。这是有关如何使用 Zeus 进行操作的视频

于 2013-05-11T00:20:32.727 回答
29

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

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

尽管我们将努力保持基本的 gdb 功能(堆栈跟踪、打印值)在受支持的平台上工作,但使用调试器了解 Go 程序的完整环境的能力可能永远不会起作用,并且改进 gdb 支持不是团队的优先事项.

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

于 2014-04-30T11:34:28.423 回答
24

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


原答案:

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

邮件枪/godebug

godebug使用源代码生成为您的程序提供调试调用
go tool cover对代码覆盖率采用类似的方法。

  • 当您运行时godebug,它会解析您的程序、检测函数调用、变量声明和语句行,并将结果代码输出到某处(当前为标准输出或原始文件上的位置)。
  • 当您运行此修改后的代码时,假设您在某处放置了一个断点,您可以单步执行它并检查变量。

稍后推出:评估任意 Go 表达式并写入变量。


2015 年 6 月更新:

虽然它可能不像“某些人”希望的那样具有交互性,但它仍然受到赞赏(并且具有“步入”功能)。
请参阅“ Go 有一个调试器——它很棒! ”(Cloudfare)

这是很酷的一点:与其与六个ptrace不可移植的不同接口搏斗,不如godebug重写你的源代码并注入函数调用,就像godebug.Line在每一行、godebug.Declare每个变量声明和godebug.SetTrace断点(即,无论你在哪里键入_ = "breakpoint")。

我觉得这个解决方案很棒。
您从中得到的是一个(可能是交叉编译的)启用调试的二进制文件,您可以像使用常规二进制文件一样将其放在临时服务器上

当到达断点时,程序将停止内联并在标准输入上等待您。

我们喜欢将 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/...遥不可及。

于 2015-03-24T20:43:42.333 回答
15

更新:

我已经检查过了,很高兴地报告版本: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]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 交互式调试的企业版 IntelliJ(或任何其他 IDE)付费。

就目前而言,fmt.Printf("%v", variable)几乎是最好的。

于 2014-12-31T20:21:31.067 回答
9

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

于 2014-04-01T08:33:03.887 回答
9

编辑

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
  1. 设置一个新的 Go 项目,或导入一个项目。
  2. 按照提示设置你的 Go SDK
  3. 设置你的 Go 库(通常在 GOROOT/src
  4. 通过“播放”图标在右上角设置运行应用程序配置:
  5. 编辑配置 -> 单击 + -> 转到应用程序

定义要运行的包或文件。

设置完成后,播放图标和调试图标现在应该处于活动状态,您可以像往常一样设置断点、监视等。

干杯

于 2015-12-27T01:55:00.037 回答
8
  1. 选项一 - GDB https://golang.org/doc/gdb

  2. 钻研

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

我个人使用选项 3。为此,您需要安装delve

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

于 2016-07-20T03:25:54.313 回答
7

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

这比打印出值来调试代码要好得多。

于 2015-10-26T11:56:21.430 回答
0

我对 Gogland ( https://www.jetbrains.com/go/ ) 非常满意,它基本上是支持 Go 的 Intellij。它有一个可以工作的调试器,随着他们的开发,它会变得越来越好。自 2017 年 1 月以来我一直在使用它,它在 2016 年 MBP 上对我来说基本稳定。

Goland 是 JetBrains 的新商业 IDE 的代号,旨在为 Go 开发提供符合人体工程学的环境。

于 2017-04-04T23:56:50.927 回答