Avatar ·

Wie erhalte ich einen Stacktrace aller Goroutinen in Go zum Debuggen

Hallo! Ich schreibe eine Multithread-Anwendung in Go, die viele Goroutinen verwendet. Irgendwann beginnt das Programm instabil zu laufen – es hängt sich auf oder gibt seltsame Fehler aus. Ich vermute, dass das Problem ein Deadlock (gegenseitige Blockierung) oder ein Goroutine-Leak (wenn sie erstellt, aber nicht beendet werden) ist.\n\nIch muss verstehen, welche Goroutinen gerade laufen und an welchen Codezeilen sie angehalten haben. Ich weiß, dass man in Java `jstack` oder `Thread.getAllStackTraces()` verwenden kann, aber in Go habe ich kein Äquivalent gefunden.\n\nZum Beispiel habe ich diesen Code:\n\n```go\npackage main\n\nimport (\n "fmt"\n "sync"\n "time"\n)\n\nfunc main() {\n var wg sync.WaitGroup\n wg.Add(2)\n\n go func() {\n defer wg.Done()\n time.Sleep(10 * time.Second)\n fmt.Println("goroutine 1 done")\n```