【问题标题】:Error when trying to parse trace using go tool trace尝试使用 go tool trace 解析跟踪时出错
【发布时间】:2017-11-10 19:36:27
【问题描述】:

我正在关注JustForFunc episode 22的教程

在 main.go 的 main() 开头添加这两行:

trace.Start(os.Stdout)
defer trace.Stop()

使用go build -o appName构建二进制文件

使用time ./appName > m.trace 计时

最后尝试使用go tool trace m.trace 打开跟踪 但出现以下错误:

2017/11/10 19:15:38 Parsing trace...
failed to parse trace: unknown event type 50 at offset 0x16

我的代码(golang 1.9,linux)的更多背景:它是一个使用 gin-gonic 构建的 GET 请求的服务器。我添加了额外的代码行 time.AfterFunc(20*time.Seconds, func(){closeServer()}) 以在 20 秒后关闭我的服务器,这样我就可以向它发出少量请求,然后停止服务器退出程序。

【问题讨论】:

  • 可能您的应用程序中的某些内容正在写入标准输出。
  • 您的评论解决了我的问题。 fmt.Print... 正在写入 os.Stdout,因此与我的其他输出混合了跟踪数据

标签: go trace


【解决方案1】:

我找到了解决问题的方法。 我遵循了本教程https://making.pusher.com/go-tool-trace/。 向 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()
// Your program here

而且它似乎工作正常。我不知道是什么导致了这个问题:(

【讨论】:

  • 当 trace.Start 到 os.Stdout 可能发生 fmt.Print.. 或其他一些应用程序的部分也可以开始写入 os.Stdout,因此跟踪文件成为跟踪数据的混合应用的其他输出
猜你喜欢
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2014-04-19
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
相关资源
最近更新 更多