是否存在任何golang交互式调试器?[关闭]


85

标题几乎总结了一下。我正在尝试Go,但我真的很想念能够在交互式环境中设置断点并尽可能多地进/出/出的功能。我知道我可以使用gdb调试Go,但是与使用可以插入gdb进行断点的IDE相比,这很烦人。

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


对于其他任何人,请确保您检查出其他答案,而不仅是关于GDB的(当前接受的)答案
Leigh

Answers:


38

更新:就个人而言,尽管GDB可以工作,但我并不喜欢在Go中使用它,它会让您流血。请查看其他一些答案,以找到替代方案。


当然是 :)

Go有一个调试器(GDB)

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

如果您想进行“图形调试”(即在编辑器中设置断点),则可以使用某些IDE(在后台使用GDB)进行此操作。

具体来说,Eclipse,LiteIDE和Zeus都可以让您设置断点并从编码环境(源)进行调试。这是有关如何与Zeus一起使用的视频


2
作为后续,我在Mac上,我发现IntelliJ go插件可以使开发变得非常轻松容易,但是LiteIDE确实擅长调试(尽管不够完美,但效果很好)。我确实必须安装一个更新的GDB才能使其完全正常工作,这有点痛苦。
丹尼尔·威廉姆斯

4
它存在很多问题,以后的Go团队将不再支持(除了基本功能),请参阅下面的答案
metakeule 2014年

正在进行的GDB打破了以前的历史,并且不再起作用。接受的答案是完全错误的。
米歇尔·朱塞佩·法达

@ user4839438嗯,前两行实际上是“不要在运行中使用gdb”。我个人使用了godebug,上次我去过,这很好。
本杰明·格林鲍姆

没错,但是标题显示“ Go有一个调试器(gdb)”,实际上不再适用,目前是一种损害。GDB曾经使用过旧版本的golang,试图使其正常运行是一个很大的麻烦,最后,它无法正常工作,也可能无法正常工作。我是Dw​​elve的快乐小狗,我也会尝试godebug
米歇尔·朱塞佩·法达

29

GDB对go的支持存在很多问题,而go团队不会解决。

有关更多信息,请阅读Rob Pike的文章

尽管我们将努力在支持的平台上保持基本的gdb功能(堆栈跟踪,打印值),但是使用调试器来了解Go程序的完整环境的能力可能永远无法工作,并且提高gdb支持并不是团队的优先考虑。

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


25
对于现在开始被采用的语言,这并不令人放心
Valerio

2
@ValerioColtrè我从来不需要调试器。单元测试和Printf(“%#v”,...)到目前为止对我来说很好...
metakeule

20
@metakeule没有人需要调试器,但是,一个好的调试器在调试中(尤其是在调试失败的测试中)可以证明是非常有用的,并且效率更高。另外,调试器不会更改您的代码,而打印语句会更改。
gotgenes 2014年

来自GDB的文档:“ GDB不太了解Go程序。堆栈管理,线程和运行时所包含的方面与执行模型有很大不同,GDB希望即使使用gccgo编译程序,它们也会使调试器感到困惑。结果,尽管GDB在某些情况下可能有用,但它并不是Go程序(尤其是大量并发程序)的可靠调试器”
masukomi 2014年

Go如何与调试器一起使用?“我们讨论了定制Go调试器已经有一段时间了,但是还没有一个。” 拉斯考克斯
伊万洲

24

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/...近在咫尺。


Godebug现在已弃用,建议改用Delve
Alexandro de Oliveira,

@AlexandrodeOliveira谢谢。我已经相应地更新了答案。
VonC

尝试钻研,似乎效果很好。在我看来,这个像样的开放源代码工具的答案使问题减少了“离题”的范围。我不想对封闭工具进行评分。也许这个问题需要解决,但是我听说确实不建议使用gdb(gdb)之后寻找替代gdb的方法。
格里·格里森

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来驱动它。

我很乐意为企业版IntelliJ(或任何其他IDE)付费,该版本在支持Go中的交互式调试方面做得不错。

到现在fmt.Printf("%v", variable)为止,它的性能已达到最佳状态。


不再!过时的答案。
2015年

mailgun / godebug是一个巨大的改进;值得使用。但是,非常值得使用的是具有集成的交互式调试器的IDE。从控制台进行调试让人想起80年代的调试。将工具添加到我的Go代码中是可行的,但是有点麻烦。我宁愿(取消)单击一行代码来(取消)设置断点。
l3x

我将重述一下……dvelve调试器+智能IDE。
2015年

嘿user4839438,我刚注意到您的帖子。会尝试一下。如果可行,那么一定值得支付JetBrains的升级费用。但这对我来说并不重要,但我确实听说Delve调试器应该可以在MS Visual Studio中工作。参见marketplace.visualstudio.com/items/lukehoban.Go
l3x

1
我已经签出并很高兴地报告该版本:2016.1.3,内部版本:145.1617.8,已发布:2016年6月5日可与Delve一起使用!您可以在这里下载它:jetbrains.com/idea/download。也请按照此处的Delve安装说明进行操作:github.com/derekparker/delve/tree/master/Documentation/…–
l3x

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. 编辑配置->单击+->转到应用程序

定义要运行的包或文件。

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

干杯


评估/观看对我不起作用:找不到...的符号值,您能为您解决这个问题吗?
Stefan Wuthrich-Altafino'1

在PyCharm 5.0.3 CE和IntelliJ IDEA 15.0.2
MrE 2016年

实际上,您实际上不需要构建delve,该插件随附了自动捆绑的插件。
dlsniper

@dlsniper是最近的吗?当我尝试时,我已经安装了go插件一段时间,我进行了升级,但是直到我构建了delve后它才起作用。
MrE

自集成以来,@ MrE delve已随该插件一起提供,大约三个月前。但是它仅适用于64位的Linux和Mac OSX。
dlsniper


7

可以进行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 +调试器功能方面得到了回报:设置断点,检查变量,单步执行。

这比打印出值来调试代码更好。


您能解释一下如何使用IntelliJ进行设置吗?调试器必须作为HTTP端点运行,不是吗?
MrE

没关系...找到了文档等...但显然需要开箱即用的最新版本的PyCharm或IntelliJ。
MrE

我没有做任何特别的事情,我只安装了Dvelve和intelliJ 14,它仍然可以与IntelliJ 15一起正常使用。关于以前的版本:不知道。
米歇尔·朱塞佩·法达

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

  2. 德尔维

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

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

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


Delve虽然落后,但仍比其他IMO好。
Ostati

1
IMO是最好的答案。选项3,它也是一个多平台解决方案。Delve有一些局限性,但是基本的视觉调试效果很好。
gideon

1

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

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


非常好!LiteIDE有点...太轻了。我喜欢IntelliJ,并且会检查出来的。
丹尼尔·威廉姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.