当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否存在任何golang交互式调试器?》经验,为你挑选了8个好方法。

标题几乎总结了它.我正在尝试Go,我真的很想能够在交互式环境中设置断点并在我想要的内容中进/出.我知道我可以使用gdb来调试Go,但与使用可以插入gdb进行断点操作的IDE相比,这是非常烦人的.

我尝试搜索一个,只能找到具有语法高亮但没有调试的插件或小型IDE.



1> Benjamin Gru..:

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


当然是 :)

Go有一个调试器(GDB)

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

如果您想要"图形调试"(即在编辑器中设置断点),某些IDE可以让您这样做(在后台使用GDB).

具体而言,Eclipse,LiteIDE和Zeus都允许您从编码环境(源代码)设置断点和调试.这是一个关于如何使用Zeus的视频.


它有很多问题,将来不会得到go团队的支持(除了基本功能),请参阅下面的答案
作为一个后续工作,我在Mac上,我发现IntelliJ go插件使开发变得非常好和简单,但LiteIDE在调试方面非常出色(虽然不完美,但效果很好).我确实必须安装一个更新的GDB,以使其工作在所有这些都很痛苦.

2> metakeule..:

GDB对go的支持有很多问题,go团队无法修复.

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

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

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


对于现在开始被采用的语言而言,这并不令人放心
@metakeule没有人需要调试器,但是,一个好的调试器可以证明非常有用并且在调试时更有效 - 特别是在调试失败测试时.另外,调试器不会改变你的代码,而print语句则会改变你的代码.
@ValerioColtrè我从来不需要调试器.单元测试和Printf("%#v",......)到目前为止对我很有帮助......

3> VonC..:

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/....



4> l3x..:

更新:

我已经检查过了,很高兴地报告该版本:2016.1.3,Build: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等似乎提供的唯一值是,您可以更快地确定Go的GDB调试支持非常差.

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

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

(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 

......完全没用.

接下来,试试这个:

(gdb) print params["UserID"]

...而且你会得到"总线错误".

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

我很乐意支付IntelliJ(或任何其他IDE)的企业版,它支持Go中的交互式调试.

到目前为止,fmt.Printf("%v", variable)它的效果和它一样好.



5> MrE..:

编辑

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

    设置新的Go项目,或导入项目.

    根据提示设置你Go SDK

    设置你的Go库(通常在GOROOT/src中

    通过"播放"图标在右上角设置"运行应用程序"配置:

    编辑配置 - >单击+ - >转到应用程序

定义要运行的包或文件.

完成设置后,Play图标和Debug图标现在应该处于活动状态,您可以像往常一样设置断点,监视等.

干杯



6> pjvds..:

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

官方页面:cgdb - curses调试器

视频:使用CGDB在命令行上轻松调试



7> Michele Gius..:

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

这比打印输出值更好,以便调试代码.



8> Pavel Nikolo..:

    方案一 - GDB https://golang.org/doc/gdb

    钻研

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

我个人使用选项3.为此你需要安装钻孔.

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有