diff --git a/core/src/main/java/com/taobao/arthas/core/command/monitor200/AbstractTraceAdviceListener.java b/core/src/main/java/com/taobao/arthas/core/command/monitor200/AbstractTraceAdviceListener.java index 6cd3a3888..300d7dfb7 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/monitor200/AbstractTraceAdviceListener.java +++ b/core/src/main/java/com/taobao/arthas/core/command/monitor200/AbstractTraceAdviceListener.java @@ -63,7 +63,12 @@ public class AbstractTraceAdviceListener extends AdviceListenerAdapter { @Override public void afterThrowing(ClassLoader loader, Class clazz, ArthasMethod method, Object target, Object[] args, Throwable throwable) throws Throwable { - int lineNumber = throwable.getStackTrace()[0].getLineNumber(); + int lineNumber = -1; + StackTraceElement[] stackTrace = throwable.getStackTrace(); + if (stackTrace.length != 0) { + lineNumber = stackTrace[0].getLineNumber(); + } + threadLocalTraceEntity(loader).tree.end(throwable, lineNumber); final Advice advice = Advice.newForAfterThrowing(loader, clazz, method, target, args, throwable); finishing(loader, advice); diff --git a/core/src/main/java/com/taobao/arthas/core/util/ThreadUtil.java b/core/src/main/java/com/taobao/arthas/core/util/ThreadUtil.java index 67e7fc448..f8f313f4b 100644 --- a/core/src/main/java/com/taobao/arthas/core/util/ThreadUtil.java +++ b/core/src/main/java/com/taobao/arthas/core/util/ThreadUtil.java @@ -208,8 +208,7 @@ abstract public class ThreadUtil { } sb.append('\n'); int i = 0; - for (; i < threadInfo.getStackTrace().length; i++) { - StackTraceElement ste = threadInfo.getStackTrace()[i]; + for (StackTraceElement ste : threadInfo.getStackTrace()) { sb.append("\tat ").append(ste.toString()); sb.append('\n'); if (i == 0 && threadInfo.getLockInfo() != null) { @@ -242,6 +241,7 @@ abstract public class ThreadUtil { sb.append('\n'); } } + ++i; } if (i < threadInfo.getStackTrace().length) { sb.append("\t...");