golang log.Printf崩溃

时间:2017-09-02 14:19:59

标签: go crash

在运行2或3秒后,我的Mac上出现代码崩溃,但在centos 7上它没问题,而且,我正在进行1.6.3。

问题:

  1. 是什么导致了这种崩溃?
  2. 如何避免它? (不从中恢复)
  3. 后续堆栈的参数意味着什么?

    log.Printf(0x1068d8, 0x6, 0x0, 0x0, 0x0)
    

    签名是:

    Print(v ...interface{})
    
  4. 崩溃的代码:

    package main
    import (
        "log"
    )
    
    func main() {
        for {
           log.Printf("hello")
        }
    }
    

    它将在10秒内崩溃,并打印:

    2017/09/02 21:50:01 hello
    2017/09/02 21:50:01 hello
    2017/09/02 21:50:01 hello
    2017/09/02 21:50:01 hello
    fatal error: unexpected signal during runtime execution
    [signal 0xb code=0x1 addr=0x1777d0d1d11 pc=0x92f60]
    
    goroutine 1 [running]:
    runtime.throw(0x12c000, 0x2a)
        /usr/local/Cellar/go/1.6.3/libexec/src/runtime/panic.go:547 +0x90 fp=0xc820035da0 sp=0xc820035d88
    runtime.sigpanic()
        /usr/local/Cellar/go/1.6.3/libexec/src/runtime/sigpanic_unix.go:12 +0x5a fp=0xc820035df0 sp=0xc820035da0
    sync.(*Pool).Get(0x1991e0, 0x0, 0x0)
        /usr/local/Cellar/go/1.6.3/libexec/src/sync/pool.go:102 +0x40 fp=0xc820035e40 sp=0xc820035df0
    fmt.newPrinter(0xed13cae09)
        /usr/local/Cellar/go/1.6.3/libexec/src/fmt/print.go:133 +0x27 fp=0xc820035e80 sp=0xc820035e40
    fmt.Sprintf(0x1068d8, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.6.3/libexec/src/fmt/print.go:202 +0x2b fp=0xc820035ed0 sp=0xc820035e80
    log.Printf(0x1068d8, 0x6, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.6.3/libexec/src/log/log.go:289 +0x49 fp=0xc820035f20 sp=0xc820035ed0
    main.main()
        /Users/haoy/video_projects/rtc-xswitch2/app/recorder/src/test.go:11 +0x3d fp=0xc820035f50 sp=0xc820035f20
    runtime.main()
        /usr/local/Cellar/go/1.6.3/libexec/src/runtime/proc.go:188 +0x2b0 fp=0xc820035fa0 sp=0xc820035f50
    runtime.goexit()
        /usr/local/Cellar/go/1.6.3/libexec/src/runtime/asm_amd64.s:1998 +0x1 fp=0xc820035fa8 sp=0xc820035fa0
    exit status 2
    

1 个答案:

答案 0 :(得分:5)

code 0x0b is 11, which is SIGSEGV.

我在使用Go 1.6.3的onMac之前看到了这个错误:请参阅“go get throws 'fatal error: unexpected signal during runtime execution'Upgrading would be ideal

有关详情,请参阅go/go issue 17824cl 32882

  

doc/devel/release.html:文档go1.6.3实际上并不支持macOS Sierra。