fix AbstractTraceAdviceListener may throw ArrayIndexOutOfBoundsException problem. #1712

pull/1716/head
hengyunabc 4 years ago
parent 6ebf5689dd
commit 013f7e9ce1

@ -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);

@ -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...");

Loading…
Cancel
Save