Como obter o stack trace de todas as goroutines em Go para depuração
Olá! Estou escrevendo uma aplicação multithread em Go que usa muitas goroutines. Em algum momento, o programa começa a funcionar de forma instável — às vezes trava, às vezes apresenta erros estranhos. Suspeito que o problema seja um deadlock ou um vazamento de goroutines (quando elas são criadas, mas não finalizam).
Preciso entender quais goroutines estão rodando agora e em quais linhas de código elas pararam. Sei que em Java posso usar `jstack` ou `Thread.getAllStackTraces()`, mas no Go não encontrei um análogo.
Por exemplo, tenho 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()
}
```
Como posso, em tempo de execução (ou durante um panic), obter o stack trace de todas as goroutines?