Cómo obtener el stacktrace de todas las goroutines en Go para depuración
¡Hola! Estoy escribiendo una aplicación multihilo en Go que usa muchas goroutines. En algún momento, el programa comienza a funcionar de manera inestable: a veces se congela, a veces da errores extraños. Sospecho que el problema es un deadlock o una fuga de goroutines (cuando se crean pero no terminan).
Necesito entender qué goroutines están funcionando ahora y en qué líneas de código se detuvieron. Sé que en Java se puede usar `jstack` o `Thread.getAllStackTraces()`, pero en Go no encontré un análogo.
Por ejemplo, tengo este código:
```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()
}
```
¿Cómo puedo en runtime (o al ocurrir un panic) imprimir el stacktrace completo para todas las goroutines?