标题几乎总结了一下。我正在尝试Go,但我真的很想念能够在交互式环境中设置断点并尽可能多地进/出/出的功能。我知道我可以使用gdb调试Go,但是与使用可以插入gdb进行断点的IDE相比,这很烦人。
我尝试搜索一个,但只能找到具有语法突出显示功能但没有调试功能的插件或小型IDE。
Answers:
更新:就个人而言,尽管GDB可以工作,但我并不喜欢在Go中使用它,它会让您流血。请查看其他一些答案,以找到替代方案。
当然是 :)
Go有一个调试器(GDB)
这是有关如何使用它的官方教程。
如果您想进行“图形调试”(即在编辑器中设置断点),则可以使用某些IDE(在后台使用GDB)进行此操作。
具体来说,Eclipse,LiteIDE和Zeus都可以让您设置断点并从编码环境(源)进行调试。这是有关如何与Zeus一起使用的视频。
godebug
,上次我去过,这很好。
GDB对go的支持存在很多问题,而go团队不会解决。
有关更多信息,请阅读Rob Pike的文章:
尽管我们将努力在支持的平台上保持基本的gdb功能(堆栈跟踪,打印值),但是使用调试器来了解Go程序的完整环境的能力可能永远无法工作,并且提高gdb支持并不是团队的优先考虑。
他们正在寻找其他调试选项,但目前尚无具体计划。文档已经过时,并且runtime-gdb.py
go 1.2附带的脚本不适用于使用python3支持编译的GDB(例如当前的Ubuntu)。
2017年更新:下面提到的godebug项目现已正式由derekparker / delve取代。
原始答案:
您现在(2015年3月)采用了基于代码检测的另一种方法。
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/...
近在咫尺。
更新:
我已经签出并很高兴地报告该版本: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)
为止,它的性能已达到最佳状态。
编辑
现在,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
定义要运行的包或文件。
设置完成后,“播放”图标和“调试”图标现在应该处于活动状态,您可以照常设置断点,监视等。
干杯
我很高兴使用CGDB,一个围绕GDB的小诅咒包装器。
可以进行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 +调试器功能方面得到了回报:设置断点,检查变量,单步执行。
这比打印出值来调试代码更好。
选项一-GDB https://golang.org/doc/gdb
Visual Studio Code及其go插件(仍使用delve)。
我个人使用选项3。为此,您需要安装delve。
该视频演示了实际的调试过程:https : //youtu.be/uBjoTxosSys?t=16m11s(整个视频非常有趣)。
我对Gogland(https://www.jetbrains.com/go/)感到非常满意,该语言基本上是具有Go支持的Intellij。它有一个工作正常的调试器,随着他们的不断发展,它会变得越来越好。自2017年1月以来,我一直在使用它,而对于2016年的MBP,它对我而言基本上是稳定的。
Goland是JetBrains新型商业IDE的代号,旨在为Go开发提供符合人体工程学的环境。