2015-11-03 20 views
5

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?

+3

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

Trả lời

2

Tôi có thể xác nhận nhận xét của @ widsvc: có thể bạn đang sử dụng một trình duyệt không tương thích như Firefox.

Nó hoạt động như mong đợi với Chrome.

Nhìn dưới mui xe, bạn có thể nhìn thấy trong giao diện điều khiển của Firefox lỗi này:

ReferenceError: tr is not defined trace:7:9

Sau khi tìm kiếm nhanh chóng, nó xuất hiện này sử dụng trace-viewer được nhúng trong Chrome: https://www.chromium.org/developers/how-tos/trace-event-profiling-tool.

tôi đã cố gắng sử dụng của họ độc lập trace2html công cụ trên nội dung của http://localhost:8080/jsontrace, nhưng sản lượng vẫn mang lại cho tôi lỗi với Firefox (đầu tiên "document.registerElement không phải là một chức năng", và sau khi sửa chữa rằng một người khác tiếp tục đến)

+0

Tôi đã thử dùng Chrome 30 trên Linux và nó cũng không thành công. Bạn đang sử dụng nền tảng nào? – merlin2011

+0

Ubuntu 14.04, Chrome 46.0.2490.80 (64 bit) – HectorJ

+0

Sau khi nâng cấp lên Chrome 46, sự cố này được giải quyết. – merlin2011

Các vấn đề liên quan