كيفية الحصول على مكدس الاستدعاءات (stacktrace) لجميع الـ goroutines في Go لأغراض التصحيح
مرحباً! أكتب تطبيقاً متعدد الخيوط بلغة Go يستخدم العديد من الـ goroutines. في مرحلة ما، يبدأ البرنامج بالعمل بشكل غير مستقر - أحياناً يتجمد، وأحياناً يظهر أخطاء غريبة. أشتبه في أن المشكلة هي deadlock (قفل متبادل) أو تسرب للـ goroutines (عندما يتم إنشاؤها ولكن لا تنتهي).
أحتاج إلى فهم أي الـ goroutines تعمل حالياً وفي أي أسطر من الكود توقفت. أعلم أنه في Java يمكن استخدام `jstack` أو `Thread.getAllStackTraces()`، لكن في Go لم أجد ما يعادلها.
على سبيل المثال، لدي هذا الكود:
```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")
```