سؤال

أود أن تولد موضوع تفريغ برمجيا.تعلمت أن هناك أساسا طريقتان للقيام بذلك:

  1. استخدام "آلة جافا الافتراضية واجهة أداة" JVM-TI
  2. استخدام أعلى المستخرجة "جافا المصحح واجهة" JDI

بالنسبة JVM-TI كنت قادرا على العثور على بعض المعلومات المفيدة ، ولكن أود أن أكتب JNI-DLL في الوقت الراهن على الأقل ، أود أن تجنب.مع JDI يمكنني استخدام جافا و يبدو أنني قادرة على استخدامها من داخل التطبيق.ولكن لم أكن قادرة على العثور على نوع من البرنامج التعليمي أو كوميديا لذلك.فقط الوثائق يمكن أن تجد ، جافا-مستندات http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ وهي ليست مفيدة جدا ، لأنها لا تظهر لي كيفية استخدام هذه الطبقات.

لذا لا أحد يعرف من تعليمي جيد/الكتاب الأول يمكن أن تقرأ ؟

Thx على أي مساعدة!

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

المحلول

هل تفكر في البعيد البديل ؟ أولا-هاء. VisualVM

thead dump with visualVM

jps و jstack هي أيضا أدوات مفيدة المدرجة في JDK 5, تقديم سريع سطر الأوامر طريقة الحصول على تتبعات المكدس من جميع المواضيع.

هذه المادة تشير إلى JDI يستخدم أيضا بعد أداة.

لذلك أنا غير متأكد من أنك يمكن أن يتسبب في موضوع تفريغ داخل البرنامج الخاص بك, بدلا من ذلك تجد وسيلة لإرسالها إلى نفسك SIGQUIT إشارة (قتل -3) على منصات يونيكس ، أو اضغط على Ctrl-\ مفتاح على Unix أو Ctrl-كسر على منصات ويندوز.

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

نصائح أخرى

هناك طريقة ثالثة:الخيط.getAllStackTraces()

http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#getAllStackTraces()

هذا هو أسهل بكثير من المصحح واجهة...

يمكنك الحصول على مجرد عن كل موضوع المعلومات التي تحتاجها بما في ذلك من المآزق http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

الخيط.getAllStackTraces() مقالب فقط تنفيذ تتبع جميع المواضيع, لكن لا تعطي معلومات من وجوه الأقفال التي تم الحصول عليها من خلال موضوع معين أو قفل على موضوع معين قد تم الانتظار.في الأساس سوف لا تكون قادرة على الظفر أسفل المآزق مع هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top