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