gpt4 book ai didi

go - 创建调用图

转载 作者:IT老高 更新时间:2023-10-28 13:04:20 30 4
gpt4 key购买 nike

我正在寻找为 Go 项目生成调用图的可能性。类似于 Doxygen's diagram functionality 的东西对于 C++ 类(使用选项 CALL_GRAPH=YES)。

到目前为止我找到了

http://saml.rilspace.org/profiling-and-creating-call-graphs-for-go-programs-with-go-tool-pprof

http://blog.golang.org/profiling-go-programs

这会在程序运行时每秒对程序的调用堆栈进行 100 次采样,并创建一个可用于分析的图表。如果您的程序大部分时间都花在与您无关的功能上,我发现这个解决方案不是很有用。

然后是这样的:

https://godoc.org/golang.org/x/tools/go/callgraph/static

从它的描述来看,这听起来像是我需要的,但似乎没有文档,我不明白如何使用它。

我也找到了

https://github.com/davecheney/graphpkg/blob/master/README.md

https://github.com/paetzke/go-dep-graph/blob/master/README.org

但他们只创建依赖图。

最佳答案

看这里:

func main() {
defer profile.Start(profile.CPUProfile, profile.ProfilePath(".")).Stop()
// Rest of program
}

正常构建并运行您的程序。你会看到分析钩子(Hook)提到:

2015/07/12 09:02:02 profile: cpu profiling enabled, cpu.pprof

运行您的程序(测试它、运行它等)以在运行期间生成配置文件运行。一旦你达到你想要的,退出然后生成调用图:

go tool pprof -pdf -output cgraph.pdf $YOURPROGBINARY cpu.pprof

您也可以运行 go tool pprof $YOURPROGBINARY cpu.pprof 来获取交互式提示,您可以在其中调用 top10web 来生成 svg。类型help 在 pprof 提示符下获取命令列表。

例如- 这是我编写的缓冲池实现的 CPU 配置文件:

~/Desktop go tool pprof poolio cpu.pprof
Entering interactive mode (type "help" for commands)
(pprof) top5
24770ms of 35160ms total (70.45%)
Dropped 217 nodes (cum <= 175.80ms)
Showing top 5 nodes out of 74 (cum >= 650ms)
flat flat% sum% cum cum%
12520ms 35.61% 35.61% 12520ms 35.61% runtime.mach_semaphore_wait
9300ms 26.45% 62.06% 9360ms 26.62% syscall.Syscall
1380ms 3.92% 65.98% 2120ms 6.03% encoding/json.(*encodeState).string
1030ms 2.93% 68.91% 1030ms 2.93% runtime.kevent
540ms 1.54% 70.45% 650ms 1.85% runtime.mallocgc

下面是一种从提示符生成 PNG 的快速方法:

(pprof) png > graph.png
Generating report in graph.png

哪个输出这个:

callgraph-example-poolio

关于go - 创建调用图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362332/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com