كيف يمكنني في جافا إضافة stacktrace إلى التصحيح المطبوعة
سؤال
ما هي أسهل طريقة لطباعة 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()
, لكن أكثر مرونة.