首页 > 解决方案 > GoLang 调试器在标准输入上阻塞

问题描述

我在使用 GoLand 的调试器来尝试从stdin. 例如,下面的代码:

package main

import (
    "io"
    "os"
    "strings"
)

func main() {

    io.Copy(os.Stdout, strings.NewReader("Start typing now...\n"))

    io.Copy(os.Stdout, os.Stdin)
}

当我run在 GoLand 中执行它时完美执行 - 控制台窗口正确收集输入。但是当我使用debug命令时 - 我可以看到我的输入出现在控制台窗口中,但是回车键不会结束输入字符串,而是光标只是移动到下一行。

我的版本:

GoLand 2018.2.2
Build #GO-182.4129.57, built on August 23, 2018
JRE: 1.8.0_152-release-1248-b8 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6

标签: golanddelve

解决方案


当您使用 OSX 时,没有简单的方法可以使其正常工作。

假设您使用的是 Go 1.10 或更高版本,请将目录更改为$GOPATH/src/github.com/user/package,然后使用 编译您的应用程序go build -gcflags "all=-N -l" github.com/user/package,然后在终端中手动启动应用程序。应用程序运行后,转到Run | Attach to Process...并从列表中选择应用程序。这会将调试器附加到正在运行的应用程序。

请注意,需要编译步骤以改善调试体验,但您不应在生产中使用生成的二进制文件,因为(几乎)所有优化都已关闭。


推荐阅读