Avatar ·

So erhält man 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 Goroutinen erstellt, aber nicht beendet werden) ist. Ich muss verstehen, welche Goroutinen gerade laufen und an welchen Codezeilen sie angehalten sind. Ich weiß, dass man in Java `jstack` oder `Thread.getAllStackTraces()` verwenden kann, aber in Go habe ich kein Äquivalent gefunden. Zum Beispiel habe ich diesen Code: ```go package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() time.Sleep(10 * time.Second) fmt.Println("goroutine 1 done") }() go func() { defer wg.Done() time.Sleep(5 * time.Second) fmt.Println("goroutine 2 done") }() wg.Wait() } ``` Wie kann ich zur Laufzeit (oder bei einer Panic) einen Stacktrace aller Goroutinen erhalten?