如何在GoLand中设置调试?

28

我正在尝试使用GoLand,听说调试器非常棒,但是我找不到任何关于如何设置它的文档(GoLand处于预览阶段,所以这并不奇怪)。我的用例:我正在编写一个REST API,我使用curl发送请求到其中。请问有人可以逐步告诉我如何开始使用调试器吗?

[编辑1](从评论中移动)当我点击Run/Debug(或Run/Run)时,会显示一个窗口,要求我编辑配置。我可以选择几种类型的配置,我尝试选择“Go应用程序”,但Debug按钮从未变灰,我无法使其可点击。我非常新手GoLand,可能漏掉了明显的东西,但我找不到缺失的任何设置。

[编辑2] 结果发现我的工作空间不符合Go规范:我的代码不在名为src的目录中。现在我的代码位于该目录中,我可以单击Run / Debug,GoLand似乎正在做正确的事情,但它没有停留在断点处或以调试器的方式运行,而是直接运行我的代码。

[编辑3] 再次尝试,它起作用了。在某些行上断点起作用,而在其他行上则不起作用。或者调试器停在断点上,但我等待无限期地加载变量列表。嗯,毕竟这是个预览版本...

[编辑4] 我刚收到通知说GoLand有一个新版本可用。我升级了,现在调试器对我来说工作得很好。


1
@zoyd 很抱歉您在调试方面遇到了问题。 您能否分享有关您的项目/设置的更多详细信息?您正在运行哪个操作系统和哪个Go版本?如果该项目是开源的,则提供一个链接将会很好。此外,最好有一种方法来重现这个问题。此外,Gogland在幕后使用Delve作为调试后端,具体取决于您的Go版本,可能会出现问题或不出现问题。 - dlsniper
@Vincent 我建议你针对你的特定问题开一个新的提问。 - Zoyd
嗨,你能分享你的代码或者代码库吗? 你有安装 Delvet 吗? - Ricardo Cunha
感谢您的关注,但现在它已经可以工作了。这可能是Gogland(现在已过时)版本中的临时问题。 - Zoyd
1
刚刚更新到6月9日版本:Gogland 中的调试器简直是个笑话。我知道这只是一个早期版本,但是,说真的 JB 人员...甚至连 Hello World 都失败了。 - cvigo
显示剩余4条评论
7个回答

12

如果你的代码不在 src 文件夹中,GoLand 将不会启用调试操作(虽然运行操作是可用的)。没有任何警告提示,所以解决这个问题可能真的很麻烦。

此外,根据项目的结构,调试可能仍然无法正常工作。在这种情况下,删除所有运行配置并创建一个新配置可能会有所帮助。关于这种行为有一个错误报告

PS:尽管 OP 在问题的编辑中提到了第一部分,但我认为在回答中提到也是值得的。


1
这是我最近看到的最愚蠢和毫无意义的要求之一。为什么IDE(或语言本身)要强制给我一个特定的文件夹名称?感谢您的答复,但如果/当我检查文件夹名称更改时,我现在将拥有我们整个服务器代码,这让人frustrated。 - iamtheddrman
这仍然是EAP版本,所以可能已经有关于此问题的错误报告。但更糟糕的是,似乎“src”目录并不总是有效。还有另一个要求,但我仍然需要找出是哪个。 - Koraktor
2
经过一些额外的研究,似乎是语言本身要求你的源代码在一个src文件夹中。它在技术上可以没有,但你必须跨越额外的障碍。考虑到没有真正的软件包管理,将你所工作的所有代码放在一个单一的文件夹层次结构中似乎是一个荒谬的设计决策。在同一存储库的多个分支上工作几乎是不可能的,在我曾经工作过的每家公司都是这样。 - iamtheddrman

8

自从@Jamillo Santos回复后,goland发生了一些变化。

首先,“Go应用程序”不再存在。

最简单的方法是找到包含main()函数的文件。应该有一个小三角形指向它,就像附加的屏幕截图中所示: main function declaration

当您点击小绿色三角形时,会出现一个菜单,其中包含运行/调试选项。 每个选项都会创建一个go build配置。

您可以编辑go build配置并为应用程序添加程序参数。 例如,如果您的程序有一个命令行参数--arg=value,则可以像这样添加: enter image description here


获取 "已编译二进制文件无法执行"。 - MrR

6
我曾经遇到过同样的问题,并且通过使用“Go应用”配置(在运行/调试配置窗口中),而不是“Go单个文件”配置来解决了这个问题。
因此,请前往Gogland的右上角并“编辑配置”。
然后,使用“Go应用程序”配置添加一个新的配置档案。
保存后,您应该能够调试代码。
启用此配置的简易方法是使用“@user1793301”方法,在要运行的文件上右键单击,然后选择“Debug'go run .go'”。
可能的解释:
注意:我没有查看任何有关它的详细信息。
事实: “Go Application”配置在运行之前构建二进制可执行文件。
事实:从控制台输出(在Goglang中)可以看出,IDE使用DLV作为调试工具。
事实:我在DLV文档中找到了“dlv debug”,它似乎可以编译和调试代码。
假设:Jetbrains的人还没有实现它。或者至少目前还没有。

3
我使用的是GoLand 2020.2.3,但“Go Application”不是模板选项 :( - Ed Harrod

4

在版本2019.1.1中,不再有Go Application。请使用Go Build替代。这里我正在调试单个脚本文件,但如果你有一个服务器应用程序等,只需指向主应用程序文件:

enter image description here

注意,在Files字段中,您必须指定实际的文件路径。您可以使用管道符号|分隔多个文件(如果要有多个起始点)。对于每个您想要能够调试的文件,都需要指定完整路径。

同样,如果您正在调试一个仅有一个起始点的服务器应用程序或其他东西,您只需要在配置中指定启动文件。 :)


2

我按照以下步骤启动了我的 Golang 服务器调试模式。(也许您想使用其他方法来启动服务器,而不是创建 makefile)

  1. 创建一个 makefile 文件
  2. 在文件中定义您的服务器/工作进程启动命令
  3. 通过为 Makefile 创建新配置运行它
  4. 转到“运行 -> 附加到进程 -> 选择正在运行的服务器”

这将使调试器附加到您的进程。 注意:

  • 您可能需要重新启动服务器才能使其正常工作。
  • IDE 将要求您安装 gops,请确保安装。如果没有安装 gops,则看不到任何正在运行的进程。

1

我曾经遇到过这个问题。

删除并重新创建Debug运行配置,然后调试就可以完美地工作了。


-1

我右键点击项目(内部有main.go),选择“调试...”,然后它就可以工作了。


2
这并没有解释为什么“调试…”可能不可用。 - Koraktor
1
我继承了一个项目,其中main.go位于顶层文件夹而不是src中。遇到了同样的问题,右键单击就可以解决。 - Ed Pike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接