【问题标题】:How to set up debugging in GoLand?如何在 GoLand 中设置调试?
【发布时间】:2017-01-11 13:59:59
【问题描述】:

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

[edit 1](移自评论)当我单击运行/调试(或运行/运行)时,会显示一个窗口,要求我编辑配置。我可以选择几种配置,我尝试选择“Go application”,但 Debug 按钮永远不会变灰,我无法让它变得可点击。我对 GoLand 很陌生,我可能遗漏了一些明显的东西,但我找不到任何设置。

[edit 2] 原来我的工作空间不符合 Go 规范:我的代码不在名为 src 的目录中。现在是这种情况,我可以单击运行/调试,GoLand 似乎在做正确的事情,除了它不会在断点处停止或表现得像调试器,我的代码只是运行。

[edit 3] 再试一次,它成功了。有点。我不知道为什么它现在可以工作,即使它以前没有,我也没有改变任何东西。现在断点在某些行起作用,而在其他行不起作用。或者调试器在断点处停止,但我永远等待要加载的变量列表。嗯,它预览,毕竟......

[edit 4] 就在今天,我收到通知说有新版本的 GoLand 可用。我升级了,现在调试对我来说效果很好。

【问题讨论】:

  • 调试器看起来“正常工作”。你有什么问题?
  • @zoyd 很抱歉您遇到了调试问题。您能否分享有关您的项目/设置的更多详细信息?您正在运行什么操作系统以及哪个 Go 版本?如果该项目是开源的,那么它的链接会很棒。有一种方法可以重现这一点也将有所帮助。此外,Gogland 在后台使用 Delve 作为调试后端,根据你的 Go 版本,事情可能会被破坏。
  • 设置 Go 结构对于 Gogland 的新手来说是很好的信息。
  • 我可以运行但我还不能调试。我收到这条消息:运行 Build hello.go 并运行时出错:找不到 Build hello.go 的运行器并运行
  • 刚刚更新到 6 月 9 日版本:Gogland 中的调试器只是一个笑话。我知道这是一个早起的鸟版本,但是,认真的 JB 伙计们......即使是 Hello Word 也失败了。

标签: debugging go ide goland


【解决方案1】:

在版本 2019.1.1 上不再有 Go 应用程序。请改用 Go Build。这里我调试的是单个脚本文件,但是如果你有一个服务器应用程序或smth,只需指向主应用程序文件:

请注意,您必须在 Files 字段中指定实际的文件路径。您可以通过用管道| 分隔文件来放置更多文件(如果您想有更多起点)。对于您希望能够调试的每个文件,您需要指定完整路径。

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我通过使用“Go Application”配置(在“运行/调试配置”窗口)而不是“Go Single File”配置解决了。

    所以,转到 Gogland 的右上角并“编辑配置”。

    然后,使用“Go Application”配置文件添加新配置。

    保存后,您应该可以调试代码了。 o/

    启用此配置的一种简单方法是使用 @user1793301 方法并右键单击要运行的文件并选择“Debug 'go run .go'”。


    可能的解释

    注意:我没有查看有关它的任何更多详细信息。

    事实:“Go Application”配置确实会在运行之前构建二进制可执行文件。

    事实:我可以看到控制台输出(在 Goglang 内部)是 IDE 使用 DLV 作为调试工具。

    事实:我在DLV documentation找到了dlv debug,它似乎可以编译和调试代码。

    假设:Jetbrains 的人没有实现它。或者至少不是YET

    【讨论】:

    • 我正在使用 GoLand 2020.2.3,并且“Go Application”不是模板的选项:(
    【解决方案3】:

    自从@Jamillo Santos 添加他的回复后,戈兰的情况发生了变化。

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

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

    当您单击绿色小三角形时,您会看到一个带有运行/调试选项的菜单。 每个人都会创建一个go build 配置。

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

    【讨论】:

    • 获取“编译后的二进制文件无法执行”
    【解决方案4】:

    如果您的代码不在src 中,GoLand 将不会启用调试操作(尽管运行可用)。没有关于这个的警告,所以解决这个问题可能真的很痛苦。

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

    PS:虽然OP在问题的编辑中提到了第一部分,但它认为值得在答案中提及。

    【讨论】:

    • 这是我很长一段时间以来见过的最愚蠢和最无意义的要求之一。为什么 IDE(或语言本身)会强制我使用特定的文件夹名称?感谢您的回答,但令人沮丧的是,如果/当我签入文件夹名称更改时,我将拥有我们的整个服务器代码......
    • 它仍然是一个 EAP,因此可能已经有关于此的错误报告。但更糟糕的是,“src”目录似乎并不总是有效。似乎还有一个要求,但我还是要找出是哪一个。
    • 在做了一些额外的研究之后,似乎它实际上是要求您的源代码位于 src 文件夹中的语言。它在技术上可以在没有它的情况下工作,但你必须跳过额外的障碍。鉴于没有真正的包管理,将您曾经处理过的所有代码都放在一个文件夹层次结构中似乎是一个荒谬的设计决定。在同一个 repo 的多个分支上工作几乎是不可能的,这在我曾经工作过的每家公司都是现实。
    【解决方案5】:

    我右键单击项目(main.go inside)并选择“Debug ...”,它就可以工作了

    【讨论】:

    • 这并不能解释为什么“调试…”可能不可用。
    • 我继承了一个项目,其中 main.go 在顶层文件夹中,而不是 src。遇到了同样的问题,然后右键单击就可以了。
    【解决方案6】:

    我遇到了这个确切的问题。

    删除并重新创建了调试运行配置。然后调试完美。

    【讨论】:

      【解决方案7】:

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

      1. 创建生成文件
      2. 在文件中定义您的服务器/工作者启动命令
      3. 通过为Makefile 创建新配置来运行它
      4. 转到Run -> Attach to process -> choose your running server

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        相关资源
        最近更新 更多