考慮下面的程序,它只是簡單地調整一些例程,然後等待它們完成並通過信道發送它們完成的信號。如何查看`runtime/trace`生成的跟蹤細節?
package main
import (
"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工具查看逐事件跟蹤?
不兼容的瀏覽器?這對谷歌瀏覽器46正常工作。 – wldsvc