Я ищу возможность генерировать график вызовов для проектов golang. Нечто похожее на Doxygen's diagram functionality для классов C++ (с опцией CALL_GRAPH = YES).Создание графика вызовов в golang
До сих пор я нашел
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
, который из его описания звучит как то, что мне нужно было, но там, кажется, нет никаких Docs, и я не понимаю, как использовать его.
Я также нашел
https://github.com/davecheney/graphpkg/blob/master/README.md
и
https://github.com/paetzke/go-dep-graph/blob/master/README.org
, но они создают только зависимостями графики.
Это метод, описанный в первая ссылка, о которой я говорил; Я забыл ссылку на исходный сайт. Для меня это не дает удовлетворительных результатов; Я вижу много вызовов функций, которые меня не интересуют, но я не вижу функций, которые меня интересуют вообще. После некоторых прогонов профилей я вижу некоторые интересные функции, но не все. Нет ли статического инструмента, который просто проходит через код и создает графики? – alex
Одна из моих проблем заключается в том, что меня также интересуют функции, которые выполняются только один раз (во время установки). Есть ли способ увеличить частоту дискретизации инструмента, s.t. вероятность того, что функции короткого запуска также будут выбраны? – alex
Частота дискретизации жестко запрограммирована во время выполнения/pprof.go: 587 через runtime.SetCPUProfileRate (hz) с hz = 100, то есть 100 выборок в секунду. Если вы вызываете runtime.SetCPUProfileRate (wishSamplingRate) * перед * вызовом profile.Start(), это можно переопределить. Попытка установить частоту дискретизации после вызова profile.Start() не будет работать («runtime: не может установить скорость профиля cpu до тех пор, пока предыдущий профиль не закончится».). – alex