Hãy xem xét chương trình sau đây, chỉ đơn giản là xoay một vài goroutines và sau đó chờ cho chúng kết thúc và tín hiệu trên kênh mà chúng đã hoàn thành.Làm cách nào để xem chi tiết của một dấu vết được tạo bởi `thời gian/dấu vết`?
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()
}
Khi chương trình này chấm dứt, đầu ra là tệp nhị phân có tên /tmp/Trace.out
. Tiếp theo, tôi đã cố gắng để xem dấu vết bằng cách sử dụng công cụ theo dõi như sau.
go tool trace -http=localhost:8080 ./Main /tmp/Trace.out
này tạo ra mắt một trang với một liên kết đến View Trace
(cùng với một cái nhìn liên kết khác cho dữ liệu chỉ tổng hợp), nhưng cách nhấp vào các kết quả liên kết trong một trang trống. Khi tôi xem nguồn của trang đó, tôi thấy nguồn sau, điều này có vẻ ngụ ý rằng JSON được mong đợi chứ không phải là nhị phân.
<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>
Làm cách nào để xem theo dõi từng sự kiện bằng công cụ Go?
Trình duyệt không tương thích? Điều này hoạt động tốt với Google Chrome 46. – wldsvc