Scanner.Scan()挂在GoLand调试器中

时间:2018-11-24 18:34:29

标签: go goland

在带有GoLand 2018.3。的OSX Mojava上使用Go v1.11.1。当我在正常模式下(而不是通过调试器)运行以下程序时,它可以正常工作。当我使用调试器运行它时,它挂在scan.Scan()调用中。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    fmt.Println("Hello")
    fmt.Print("> ")

    for scanner.Scan() {
        input := scanner.Text()
        fmt.Println(input)
        fmt.Print("> ")
    }

}

逐步调试程序scan.Scan()似乎在读取输入时挂起。我在名为“ zsyscall_darwin_amd64.go”的文件中找到了这一行:

r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))

无论我在命令提示符下键入什么,它都不会返回。在非调试器配置中,它可以正常工作,并打印出我键入的所有内容(按Enter键之后)。

1 个答案:

答案 0 :(得分:2)

感谢您的评论。报告该问题后,我意识到这是GoLand中的一个已知问题,并且已经过去一年了:

https://youtrack.jetbrains.com/issue/GO-4264

OSX上的delve调试器后端似乎存在一些问题。注释中的一个可能的解决方法与以纯模式编译自己的后端有关,但这可能会导致其他问题。

希望它会很快修复。没有调试器,调试起来非常困难:)。