سؤال

كنت أتساءل عما إذا كان هناك شيء ما (في عالم Java) قادر على التقاط لقطة لحالة JVM الحالية بالميزات التالية:

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

الميزتان الأوليان مطلوبتان (الثالثة ستكون رائعة).ويجب أن يكون مناسبًا للاستخدام في الإنتاج (لذلك لا توجد طريقة للتعامل مع مصححات الأخطاء).

قبل أن أطرح هذا السؤال، قمت بالبحث في WWW (أطول فترة ممكنة) ووجدت بعض المؤشرات:

  • اعتراض كاجون:كما قال في مشاركة دزون, ، إنه وكيل JVM سلبي يلبي المتطلبات الثلاثة!لكن له جانبان سلبيان:يجب عليك أن تدفع ثمنها والموقع معطل (ربما لا توجد فرصة لدفع أي شيء).
  • أفي كود اعتراض ستوديو:ما يعادل .NET من Cajoon.فقط لإعطاء فكرة عن.
  • JavaFrame:حسنًا، إنها تغريدة، ولكنها تشير إلى مستودع SVN متاح والذي يحتوي على كود المصدر (بموجب ترخيص MIT) لوكيل JVM والذي يبدو جيدًا (سأحاول تجربته).

لذا، ربما أبحث عن حل غير موجود؟الأمر ليس عاجلاً، لكن لدي فكرة مشروع وسيكون من الرائع استكشاف هذا المسار "المجهول" (؟) والحصول على شيء حقيقي.

يبدو من الواضح أنه سيكون وكيل JVM (حدث الاستثناء من JVMTI، for مثال).

أخيرًا، أود أن أسلط الضوء على الفقرة التالية من مقالة التعامل مع الاستثناءات في ويكيبيديا:

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

هذه هي الفكرة.آمل أن يقدم لي شخص ما بعض الأفكار أو ربما في المستقبل أن يستلهم هذا المنشور المتواضع :)

شكرًا!

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

المحلول

أنا ألقي نظرة على JavaFrame ويبدو أن نقطة انطلاق جيدة.فقط قم بتثبيت Apache Ant، ​​افعل ذلك ant في دليل javaframe وقم بتشغيل مجموعة الاختبار (داخل دليل الاختبار) باستخدام:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

لا يحصل على أي متغير محلي ولكنه يحاول.لذلك، كما قلت، يمكن أن تكون نقطة البداية.آمل أن أتحدث أكثر عن استخدامه، ولكن لا يوجد وقت ولا وثائق (هناك الكثير من المشاريع المسماة JavaFrame) تعتبر ظروفًا سيئة.

ربما في يوم من الأيام يمكن القيام بذلك مرة أخرى.نعم مجددا.كان هناك Cajoon، وكان يبدو واعدًا ولامعًا، لكن موقعه الإلكتروني معطل ولا يوجد أي أثر لأي جرة قابلة للتنزيل يمكنك تجربتها.

شكرا للجميع!

بي دي .:للإشارة فقط، بعض الروابط التي وجدتها أثناء البحث:

نصائح أخرى

قد ترغب في الاطلاع على العمل الذي قامت به NetBeans فيما يتعلق بتسجيل الاستخدام الآلي: http://wiki.netbeans.org/UsageLoggingSpecification.

أما بالنسبة للتخلص من المتغيرات المحلية، فأنا أتخيل أنه يمكنك ببساطة استخدام مصحح الأخطاء، مثل ذلك الذي ذكره bajafresh4life.

ربما يمكن القيام به مع الجانب J?

لست متأكدًا مما إذا كان هذا قابلاً للتطبيق في بيئة الإنتاج، ولكن هناك مصحح الأخطاء كلي العلم:

ماذا لو كان مصحح الأخطاء الخاص بك يمكن أن "يعود إلى الوراء في الوقت المناسب؟" هل سيجعل ذلك تصحيح الأخطاء أسهل؟وببساطة، من خلال تسجيل جميع التعيينات المتغيرة، من الممكن القيام بذلك بشكل أساسي.هذه هي الفكرة الأساسية لتصحيح الأخطاء كلي العلم.الجزء المذهل هو أنه يمكن تصحيح أخطاء البرامج الكبيرة بهذه الطريقة - Ant، ​​JUnit، مصحح الأخطاء نفسه.

http://www.lambdacs.com/debugger/

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