如何使用 dlv 处理 stdin/stdout

Bry*_*yon 5 go delve

我正在使用 Delve 进行调试,但在处理标准输入/标准输出的最佳方法方面遇到了问题。

第一个问题是我无法读取控制台。我有一个函数需要使用来自控制台的输入:

func readConsole() string {
    reader := bufio.NewReader(os.Stdin)
    entry, err := reader.ReadString('\n')
    if err != nil {
        tlog.Fatal(fmt.Errorf("readConsole(): Error reading console input. %v", err))
    }
    entry = strings.Replace(entry, "\n", "", -1)
    return entry
}
Run Code Online (Sandbox Code Playgroud)

ReadString() 返回以下“错误文件描述符”错误:

F0208 21:03:56.574021  429026 configurator.go:81] readConsole(): Error reading console input. read /dev/stdin: bad file descriptor
Run Code Online (Sandbox Code Playgroud)

第二个问题是,当我刚刚运行应用程序时, fmt.Printf() 可以工作,但是如果我单步执行源代码, fmt.Printf() 不会显示任何内容。

我知道 dlv 正在通过控制台竞争输入和输出,但不确定如何管理竞争的要求。