Avatar ·

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?