كيفية الحصول على مكدس الاستدعاءات (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")
```