考虑下面的程序,它简单地启动几个 goroutine,然后等待它们完成并通过通道发出信号表示它们已完成。package mainimport ( "os" "runtime/trace" "time")func doWork(c chan int) { startTime := time.Now() i := 0 for curTime := startTime; curTime.Sub(startTime) < 2; curTime = time.Now() { i++ } c <- i}func main() { numGoRoutine := 10 traceOutFile, _ := os.OpenFile("/tmp/Trace.out", os.O_WRONLY|os.O_CREATE, os.ModeExclusive|os.ModePerm) trace.Start(traceOutFile) // Start goroutines termChannel := make(chan int) for i := 0; i < numGoRoutine; i++ { go doWork(termChannel) } // Wait for completion for i := 0; i < numGoRoutine; i++ { <-termChannel } trace.Stop()}当这个程序终止时,输出是一个名为/tmp/Trace.out. 接下来,我尝试使用跟踪工具查看跟踪,如下所示。go tool trace -http=localhost:8080 ./Main /tmp/Trace.out这会产生一个带有链接的页面View Trace(连同一个只提供聚合数据的其他链接的视图),但点击该链接会导致一个空白页面。当我查看该页面的源代码时,我看到了以下源代码,这似乎暗示着 JSON 是预期的,而不是二进制的。<html> <head> <link href="/trace_viewer_html" rel="import"> <script> document.addEventListener("DOMContentLoaded", function(event) { var viewer = new tr.TraceViewer('/jsontrace'); document.body.appendChild(viewer); }); </script> </head> <body> </body></html>如何使用 Go 工具查看逐事件跟踪?
2 回答
大话西游666
TA贡献1817条经验 获得超14个赞
我可以确认@widsvc 的评论:您可能使用的是不兼容的浏览器,例如 Firefox。
它在 Chrome 中按预期工作。
在引擎盖下看,您可以在 Firefox 的控制台中看到此错误:
ReferenceError: tr 未定义 trace:7:9
快速搜索后,它似乎使用嵌入在 Chrome 中的跟踪查看器:https : //www.chromium.org/developers/how-tos/trace-event-profiling-tool。
我尝试trace2html
在http://localhost:8080/jsontrace的内容上使用他们的独立工具,但输出仍然给我错误的 Firefox(第一个“document.registerElement 不是一个函数”,在修复之后其他人保留未来
侃侃无极
TA贡献2051条经验 获得超10个赞
万一有人发现自己处于我的状态,事实证明,Chrome 49 中的跟踪查看器也已损坏。
它已在最近的 CL 中得到修复:https : //go-review.googlesource.com/#/c/22013/
- 2 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消