无法解析跟踪:没有 EvFrequency 事件

Gab*_*lla 4 go

我生成这样的跟踪:

func main() {
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }
    defer trace.Stop()
//this is my app:
    http.HandleFunc("/", someFunc)
    log.Fatal(http.ListenAndServe(":5000", nil))
}
Run Code Online (Sandbox Code Playgroud)

然后我在 CLI 中运行:

$ go run main.go
Run Code Online (Sandbox Code Playgroud)

刷新浏览器,生成trace.out,1.8MB,然后:

$ go tool trace trace.out
018/09/09 13:25:18 Parsing trace...
failed to parse trace: no EvFrequency event
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?谢谢。

dol*_*lan 6

跟踪数据只能在停止跟踪后(即trace.Stop()调用后)才能查看。您提供的代码http.ListenAndServer(...)将永远阻塞(除非遇到错误)。

您是否尝试在跟踪停止之前查看跟踪?

一种解决方案可能是等待中断信号,然后在收到中断信号时退出该函数,这将导致跟踪停止并写入。

func main() {
    f, err := os.Create("trace.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }
    defer trace.Stop()

    http.HandleFunc("/", someFunc)
    go func() {
        log.Fatal(http.ListenAndServe(":5000", nil))
    }()

    signalChan := make(chan os.Signal, 1)
    signal.Notify(signalChan, os.Interrupt)
    <-signalChan
}
Run Code Online (Sandbox Code Playgroud)