【问题标题】:scanner.Scan() hangs in GoLand debuggerscanner.Scan() 在 GoLand 调试器中挂起
【发布时间】:2018-11-24 18:34:28
【问题描述】:

在带有 GoLand 2018.3 的 OSX Mojava 上使用 Go v1.11.1。当我在正常模式下(不是通过调试器)运行以下程序时,它工作正常。当我使用调试器运行它时,它会挂在scanner.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("> ")
    }

}

使用调试器单步执行,scanner.Scan() 似乎在读取输入时挂起。我在名为“zsyscall_darwin_amd64.go”的文件中找到了这一行:

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

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

【问题讨论】:

  • 听起来很像 GoLand 并没有给你任何方法来控制程序的 STDIN。
  • 这似乎是 GoLand 中的一个错误,正常运行完美。调试不起作用。

标签: go goland


【解决方案1】:

感谢 cmets。报告此问题后,我得知这是 GoLand 中的一个已知问题,并且已经存在一年多了:

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

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

希望它尽快得到修复。没有调试器很难调试:)。

【讨论】:

  • 更新:已修复。
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2015-11-12
相关资源
最近更新 更多