Poszukuję możliwości wygenerowania wykresu połączeń dla projektów golang. Coś podobnego do Doxygen's diagram functionality dla klas C++ (z opcją CALL_GRAPH = YES).Tworzenie wykresu połączeń w golang
tej pory znalazłem
http://saml.rilspace.org/profiling-and-creating-call-graphs-for-go-programs-with-go-tool-pprof
lub
http://blog.golang.org/profiling-go-programs
Ten próbki stos wywołanie programu 100 razy na sekundę, podczas gdy program jest uruchomiony i tworzy wykres przydatnych do profilowania. Jeśli twój program spędza większość czasu na funkcjach, które nie są dla ciebie ważne, uznałam, że to rozwiązanie nie jest zbyt przydatne.
Wtedy nie jest to:
https://godoc.org/golang.org/x/tools/go/callgraph/static
który z jego opis brzmi jak to, co muszę, ale nie wydaje się być żadnych docs i nie rozumiem, w jaki sposób z niego korzystać.
Znalazłem również
https://github.com/davecheney/graphpkg/blob/master/README.md
i
https://github.com/paetzke/go-dep-graph/blob/master/README.org
ale tworzą tylko zależnościami wykresy.
Jest to metoda opisana w pierwszy link, o którym wspomniałem; Zapomniałem połączyć z oryginalną stroną. Dla mnie nie daje to satysfakcjonujących rezultatów; Widzę wiele wywołań funkcji, które mnie nie interesują, ale nie widzę wywołań funkcji, które mnie interesują. Po wykonaniu niektórych profilów widzę niektóre z interesujących funkcji, ale nigdy nie wszystkie. Czy nie ma statycznego narzędzia, które po prostu przechodzi przez kod i tworzy wykresy? – alex
Jednym z moich problemów jest to, że interesują mnie również funkcje, które są wykonywane tylko raz (podczas instalacji). Czy istnieje sposób na zwiększenie częstotliwości próbkowania narzędzia, s.t. prawdopodobieństwo zwiększa się, że próbkowane są także funkcje krótko działające? – alex
Częstotliwość próbkowania jest zakodowana na stałe w czasie wykonywania/pprof.go: 587 za pośrednictwem runtime.SetCPUProfileRate (hz) z Hz = 100, tj. 100 próbek na sekundę. Jeśli wywołasz metodę runtime.SetCPUProfileRate (desiredSamplingRate) * przed * wywołaniem profile.Start(), można to zmienić. Próba ustawienia częstotliwości próbkowania po wywołaniu funkcji profile.Start() nie będzie działać ("środowisko wykonawcze: nie można ustawić szybkości profilu cpu, dopóki nie zakończy się poprzedni profil."). – alex