2015-11-03 100 views
5

考慮下面的程序,它只是簡單地調整一些例程,然後等待它們完成並通過信道發送它們完成的信號。如何查看`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工具查看逐事件跟蹤?

+3

不兼容的瀏覽器?這對谷歌瀏覽器46正常工作。 – wldsvc

回答

2

我可以確認@ widsvc的評論:您可能正在使用Firefox等不兼容的瀏覽器。

它可以像Chrome一樣按預期工作。

引擎蓋下看,你可以在Firefox的控制檯中看到這樣的錯誤:

ReferenceError: tr is not defined trace:7:9

快速搜索後,出現此使用trace-viewer被嵌入在Chrome:https://www.chromium.org/developers/how-tos/trace-event-profiling-tool

我試圖用自己獨立的trace2html工具上的http://localhost:8080/jsontrace的內容,但輸出仍然給我的Firefox錯誤(第一個「document.registerElement不是一個函數」,並定於一個人不斷傳來後)

+0

我在Linux上嘗試過Chrome 30,但它也失敗了。你在哪個平臺上? – merlin2011

+0

Ubuntu 14.04,Chrome 46.0.2490.80(64位) – HectorJ

+0

升級到Chrome 46後,此問題得到解決。 – merlin2011