Avatar ·

كيفية الحصول على وطباعة مكدس الاستدعاءات الحالي (stack trace) في Java؟

مرحبًا أيها الزملاء! لقد بدأت مؤخرًا في البرمجة بلغة Java وواجهت موقفًا: في تطبيقي متعدد الخيوط (multithreaded) تظهر أحيانًا أخطاء غريبة يصعب تتبعها. أريد في مكان معين من الكود فقط معرفة من أين جاء تيار التنفيذ — أي الحصول على مكدس الاستدعاءات الحالي (call stack) لفهم تسلسل الطرق (methods) التي أدت إلى هذه النقطة. أعلم أنه عند حدوث استثناء (exception) يمكننا استخدام `e.printStackTrace()`، لكن ماذا لو لم يكن هناك استثناء وأنا فقط بحاجة إلى تسجيل (log) المكدس الحالي لأغراض التصحيح (debug)؟ على سبيل المثال، أريد إضافة مثل هذا التشخيص إلى الطريقة `processOrder()` لمعرفة من يستدعيها: ```java public class OrderService { public void processOrder(int orderId) { // هنا أريد الحصول على المكدس وتسجيله System.out.println("Processing order " + orderId); // ... منطق الأعمال } } ``` لقد حاولت البحث في Google، لكنني وجدت العديد من الخيارات المختلفة: بعضهم يقترح `Thread.currentThread().getStackTrace()`