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") ```