【问题标题】:Goland doesn't accept stdin while debuggingGoland 在调试时不接受标准输入
【发布时间】:2019-01-21 02:52:34
【问题描述】:

在 macOS 上使用 Goland 进行调试时,我的程序等待来自标准输入的输入。

我可以在控制台中输入并按回车,但输入没有传递给我的程序。

这就像在文本编辑器中输入一样。我可以输入,按回车,删除我刚才所做的一切。我的程序没有将这些传递给它。

在从控制台使用 dlv 进行调试时,我也遇到了这种行为,但是,我发现了关于如何在这种情况下解决它的讨论:

https://github.com/go-delve/delve/issues/1274#issuecomment-406969034

我也看到了针对 vscode 的类似修复:

https://github.com/Microsoft/vscode-go/issues/219#issuecomment-192164367

但我找不到 goland 的解决方案。

【问题讨论】:

    标签: macos debugging go stdin goland


    【解决方案1】:

    这是一个已知问题,请参阅官方issue tracker report

    解决方法是使用正确的调试标志编译应用程序,-gcflags="all=-N -l" for Go 1.10 or newer and -gcflags="-N -l" 用于 Go 1.9 或更早版本),在 OS 终端中启动应用程序,然后使用 @987654323 @ 特征。您还可以查看链接的问题以了解其他可能的解决方法。

    【讨论】:

    • 在 goland 的哪里可以添加这些标志?由于没看到在哪里做,暂时只是用终端编译。
    • 当您出于调试目的编译进程时会自动添加这些标志。但是,如果您使用 Run Configuration 仅编译项目而不运行它,通过禁用 `Run after build` 部分,则可以将标志添加到 `Go tool arguments` 部分。
    【解决方案2】:

    在通过fmt.Scanf() 读取输入之前,您可以在main 例程中添加一个 STDIN 环境变量来解决此问题

        if stdin := os.Getenv("STDIN"); len(stdin) != 0 {
            stdinFile, err := os.Open(stdin)
            if err != nil {
                panic(err)
            }
            os.Stdin = stdinFile
    
        }
    

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多