كيف يمكنني في جافا إضافة stacktrace إلى التصحيح المطبوعة

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

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أسهل طريقة لطباعة stacktrace من التصحيح المطبوعة?في كثير من الأحيان أثناء الاختبار كنت ترغب في معرفة مكدس الاستدعاءات المؤدية إلى حالة استفزاز تصحيح الرسالة.

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

المحلول

نصائح أخرى

إذا كنت تستخدم log4j

Exception e = new Exception();
log.error("error here", e);

طباعة stacktrace إلى السجل الخاص بك.

إذا كنت ترغب في حفظ تتبع المكدس في سلسلة يمكنك أن تفعل هذا ؛

String exception = "";
for (StackTraceElement element : e.getStackTrace())
   exception += element.toString() + "\n";

حيث e هو الواضح استثناء.

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

مجرد خلق التعسفي استثناء لا حيلة لي:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();

وكذلك ما @jjnguy قال: إذا لم يكن لديك استثناء ، يمكنك أيضا الاتصال الخيط.getStackTrace().

يجب أن تكون اصطياد استثناء في المحاولة-catch.

e.getStackTrace();

أن يعود StackTraceElement[] التي يمكنك ثم تفسير.

أيضا:

e.printStackTrace()

سوف...طباعة stacktrace.

ببساطة طباعة الحالية تتبع المكدس إلى stderr, يمكنك الاتصال على:

Thread.dumpStack();

والذي في حد ذاته يدعو فقط:

new Exception("Stack trace").printStackTrace();

لانتاج stdout بدلا من stderr, تمر System.out إلى printStackTrace():

new Exception("Stack trace").printStackTrace(System.out);

فقط لأنني في حاجة بنفسي:

كما مستوحاة من الإجابة كيف يمكنني العثور على المتصل من طريقة استخدام stacktrace أو التفكير ؟ يمكنك استرداد مكدس الاستدعاءات باستخدام

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

ثم عملية طباعة/سجل كل ما كنت مهتما في.عمل أكثر من استخدام Thread.dumpStack(), لكن أكثر مرونة.

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