سؤال

أريد أن أكتب التصور البسيط من برنامج Java من خلال عرض البرنامج طريقة المكالمات فروع شجرة.ويمكن القيام بذلك ببساطة من خلال وجود البرنامج في حد ذاته أقول التصور ما هو به ، ولكن أريد أن تكون قادرة على القيام بذلك مع أي طريقة جافا/الدرجة وليس فقط تلك التي يمكنني تعديل ذلك.

ما أحتاجه هو القدرة على مشاهدة الأساليب برنامج المكالمات و ما هي الوسائل يسمى في هذه الطريقة وهلم جرا.ومن الواضح تتبعات المكدس توفير بالضبط هذه الوظيفة:

 java.lang.NullPointerException
     at MyClass.mash(MyClass.java:9)
     at MyClass.crunch(MyClass.java:6)
     at MyClass.main(MyClass.java:3)

لذلك فكرت في وجود البرنامج الذى تريد مراقبة تشغيل في خيط ثم مجرد إلقاء نظرة على هذا الموضوع المكدس.ومع ذلك ، فإن الخيط فئة لا تدعم هذا.يدعم فقط الطباعة المكدس الحالي.

الآن أنا بالطبع فكرت ببساطة تغيير PrintStream الفئة النظام حتى الخيط طباعة في كومة في بلدي PrintStream, ولكن هذا يبدو من الخطأ.

هل هناك طريقة أفضل للقيام بذلك ؟ هل هناك أي موجود من قبل فئات/طرق يمكنني استخدامها ؟

أيضا, أنا حاليا تحميل جافا شفرة المصدر ، للتحقق من مدى بالضبط موضوع الطبقة يطبع في كومة لذا ربما فرعية موضوع تقليد dumpStack (طريقة) مع بلدي getStack الأسلوب ().

هل كانت مفيدة؟

المحلول 2

ويا اطلاق النار، وتبحث عن طريق شفرة المصدر لاحظت الطبقة موضوع لديها طريقة الجمهور StackTraceElement [] getStackTrace ()، إنه لم يكن في وثائق كنت أقرأ. الآن أشعر غبية.

ولذا نعم، يبدو أن هذا الحل.

نصائح أخرى

وبحث أيضا في VisualVM، التي يتم شحنها مع أحدث البيانات جافا.

قد يكون نهج واحد لاستخدام شيء من هذا القبيل BCEL لالمعالجة المسبقة بايت كود هدف لادخال دعوات ل التعليمات البرمجية الخاصة بك على كل دخول وخروج طريقة (ربما يكون أفضل للقيام خروج عن طريق التفاف طريقة كله في محاولة / أخيرا كتلة، للقبض على مخارج استثناء). من ذلك، يمكنك استنتاج شجرة الدعوة بالضبط كما يحدث.

هل يمكن استخدام AspectJ للحصول على ذلك. إلقاء نظرة على هذا بالضبط استخدام قضيتك.

إلقاء نظرة على ThreadMXBean الفئة-أنه بلدي توفير ما تحتاجه.أساسا،:

  • دعوة ManagementFactory.getThreadMXBean() للحصول على مثيل ThreadMXBean;
  • دعوة getAllThreadIds() على الناتج ThreadMXBean تعداد الحالي المواضيع ؛
  • دعوة getThreadInfo() للحصول على أعلى ن تتبع بنية تخزين العناصر من قائمة معينة من المواضيع.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top