Avatar ·

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