猿问

如何查看由“runtime/trace”生成的跟踪的详细信息?

考虑下面的程序,它简单地启动几个 goroutine,然后等待它们完成并通过通道发出信号表示它们已完成。


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 工具查看逐事件跟踪?


偶然的你
浏览 177回答 2
2回答

大话西游666

我可以确认@widsvc 的评论:您可能使用的是不兼容的浏览器,例如 Firefox。它在 Chrome 中按预期工作。在引擎盖下看,您可以在 Firefox 的控制台中看到此错误:ReferenceError: tr 未定义 trace:7:9快速搜索后,它似乎使用嵌入在 Chrome 中的跟踪查看器:https&nbsp;:&nbsp;//www.chromium.org/developers/how-tos/trace-event-profiling-tool。我尝试trace2html在http://localhost:8080/jsontrace的内容上使用他们的独立工具,但输出仍然给我错误的 Firefox(第一个“document.registerElement 不是一个函数”,在修复之后其他人保留未来

侃侃无极

万一有人发现自己处于我的状态,事实证明,Chrome 49 中的跟踪查看器也已损坏。它已在最近的 CL 中得到修复:https&nbsp;:&nbsp;//go-review.googlesource.com/#/c/22013/
随时随地看视频慕课网APP

相关分类

Go
我要回答