Ich bin auf der Suche nach einer Möglichkeit, ein Call-Graph für Golang-Projekte zu generieren. Ähnliches wie Doxygen's diagram functionality für C++ - Klassen (mit der Option CALL_GRAPH = YES).Erstellen von Call-Graph in Golang
Bisher fand ich
http://saml.rilspace.org/profiling-and-creating-call-graphs-for-go-programs-with-go-tool-pprof
oder
http://blog.golang.org/profiling-go-programs
Diese Proben des Call-Stack des Programms 100 mal pro Sekunde, während das Programm ausgeführt wird, und erstellt ein Diagramm nützlich für die Profilierung. Wenn Ihr Programm die meiste Zeit in Funktionen spielt, die für Sie nicht relevant sind, fand ich diese Lösung nicht sehr nützlich.
Dann gibt es das:
https://godoc.org/golang.org/x/tools/go/callgraph/static
, die aus ihrer Beschreibung klingt wie das, was ich brauchen würde, aber es scheint keine Dokumente zu sein, und ich verstehe nicht, wie es zu benutzen.
Ich fand auch
https://github.com/davecheney/graphpkg/blob/master/README.md
und
https://github.com/paetzke/go-dep-graph/blob/master/README.org
aber sie schaffen nur Abhängigkeitsgraphen.
Mit dieser Methode wird beschrieben in der erste Link, den ich erwähnt habe; Ich habe vergessen auf die ursprüngliche Seite zu verlinken. Für mich gibt das keine befriedigenden Ergebnisse; Ich sehe viele Funktionsaufrufe, die für mich nicht interessant sind, aber ich sehe die Funktionsaufrufe, an denen ich überhaupt interessiert bin, nicht. Nach einigen Profiling-Läufen sehe ich einige der interessanten Funktionen, aber nie alle. Gibt es kein statisches Werkzeug, das einfach durch den Code geht und Graphen erstellt? – alex
Eines meiner Probleme ist, dass ich mich auch für Funktionen interessiere, die nur einmal ausgeführt werden (während des Setups). Gibt es eine Möglichkeit, die Abtastrate des Werkzeugs zu erhöhen, z. die Wahrscheinlichkeit steigt, dass auch kurze Lauffunktionen abgetastet werden? – alex
Die Abtastrate ist in runtime/pprof.go: 587 über Laufzeit fest codiert.SetCPUProfileRate (hz) mit hz = 100, d.h. 100 Abtastungen pro Sekunde. Wenn man runtime.SetCPUProfileRate (wishedSamplingRate) * vor * Aufruf von profile.Start() aufruft, kann man dies überschreiben. Der Versuch, die Abtastrate nach dem Aufruf von profile.Start() einzustellen, funktioniert nicht ("runtime: cpu profile rate kann nicht eingestellt werden, bis das vorherige Profil beendet ist."). – alex