كيفية الحصول على نص تتبع مكدس الاستثناء في جافا ؟

StackOverflow https://stackoverflow.com/questions/225489

  •  03-07-2019
  •  | 
  •  

سؤال

في العادية جافا, يمكنك الحصول على نص تتبع المكدس عن طريق تمرير PrintWriter إلى printStackTrace.لدي شعور أنني أعرف الجواب على هذا (أي"لا") ولكن ،

هل هناك أي طريقة للحصول على نص تتبع المكدس في JavaME مثل سلسلة ؟

تحديث:

أود أن أذكر أنني مقيدة CLDC 1.0

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

المحلول

AFAIK لا يوجد طريقة للحصول على تتبع المكدس كسلسلة قيمة إلا إذا محدد منصة توفر وسيلة لتجاوز النظام الافتراضي.يخطئ تيار.على منصة بلاك بيري ، فإنه يلقي بها تتبع المكدس على catch(Exception) من أجل حفظ الذاكرة ، ومع ذلك فإنه لا يفعل ذلك على catch(Throwable) ويتيح الوصول إلى تتبع المكدس من خلال الجهاز سجل الأحداث.

لقد انتهى به هو اصطياد Throwable بدلا من الاستثناء في آخر لحظة ممكنة و الطباعة تتبع المكدس من هناك.هذا بالطبع لديه الخطر الذي أنت أيضا اصطياد java.lang.Error التي ليست جيدة جدا ، خاصة إذا OutOfMemoryError, ، على الرغم من دعوة إلى System.gc() قبل الطباعة تتبع المكدس يبدو للحد من مخاطر و لم يكن لدينا أي مشاكل مع ذلك.

أود أن ننظر في أي منصة كنت تستهدف وانظر إذا أنها تعطي إمكانية الوصول إلى النظام.خطأ في مكان ما.يمكنك دائما ربط المصحح يجب أن تظهر على وحدة الإخراج ، على الرغم من أنه يبدو أنك بعد الحصول على تتبعات المكدس 'في الميدان'.

نصائح أخرى

حلين:

  • إنتاج استثناء على المحاكي.اللاسلكي أدوات و Netbeans طباعة تتبعات المكدس على جهاز الكمبيوتر الخاص بك.

  • استخدام جهاز سيمبيان.

قبل Feature Pack 2 Series 60 3rd edition, Symbian استخدام الهواتف الشمس الساخنة آلة جافا الافتراضية.كان تتكيف مع نظام التشغيل سيمبيان من خلال ربط إلى التنفيذ الجزئي C مكتبة القياسية.

هذا يسمح سيمبيان لإنشاء C++ برنامج يسمى "معيد التوجيه" التي كانت قادرة على التقاط VM الإخراج القياسي والخطأ المعياري ، بما في ذلك جافا استثناء تتبعات المكدس.

c++ redirector لم يكن ترقية الإصدار 9 من نظام التشغيل سيمبيان.بدلا من ذلك ، "إعادة توجيه://" GCF البروتوكول أدخلت على VM ،

من منفصلة MIDlet ، فتح InputStream من اتصال عاد من الموصل.فتح("إعادة توجيه://", موصل.قراءة);ثم يمكنك التقاط الاستثناء تتبعات المكدس على هواتف سيمبيان.

تحرير :"إعادة توجيه://" في Series60 5th edition و "إعادة توجيه://اختبار" يجب أن تعمل على Series60 3rd edition feature pack 2

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

لقد خلق أداة التي يمكن استخدامها لتسجيل الدخول السليم تتبعات المكدس أيضا في CLDC.التحقق من ذلك في http://jarrut.sourceforge.net.انها لا تزال جديدة جدا و قد يكون بعض حواف خشنة ، لكنه يعمل بالنسبة لي و لم أكن أتصور النامية MIDlets دون ذلك بعد الآن.أفضل طريقة لاستخدامه هو الجمع بين ذلك مع microlog.

Unfotunately الأداة حاليا يتطلب CLDC 1.1 لذلك قد لا يحل المشكلة على الملصق الأصلي.

هل يمكن أن يكون PrintWriter الكتابة إلى ByteArrayOutputStream و إعادة بناء سلسلة من وحدات البايت.

try{
    throw new Exception("Message");     
} catch (Exception ex){
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ex.printStackTrace(new PrintStream(out));
    System.out.println(new String(out.toByteArray()));
}

انها ليست جميلة ، ولكن يجب أن تعمل في كل مكان تقريبا.قبل محاولة أعلاه ، تأكد من أنك لم يكن لديك الوصول إلى [Throwable#getStackTrace](http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#getStackTrace()), كسوف تدعي انها متوفرة في CDC/مؤسسة 1.1, ولكن هذا لا يقول شيئا عن ملامح أخرى.

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