/* * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/* * @test * @bug 8143214 * @summary Verify outputs of Thread.dumpStack() and Throwable.printStackTrace(). * This test should also been run against jdk9 successfully except of * VM option MemberNameInStackFrame. * @run main/othervm DumpStackTest
*/
String getClassName() { return classname;
}
String getMethodName() { return methodname;
}
String getFileName() { int i = classname.lastIndexOf('.'); int j = classname.lastIndexOf('$');
String name = classname.substring(i+1, j >= 0 ? j : classname.length()); return name + ".java";
}
@Override public String toString() { return classname + "." + methodname + "(" + getFileName() + ")";
}
}
staticvoid test() {
CallFrame[] callStack = new CallFrame[] { new CallFrame(Thread.class, "getStackTrace"), new CallFrame(DumpStackTest.class, "test"), new CallFrame(DumpStackTest.class, "main"), // if invoked from jtreg new CallFrame("jdk.internal.reflect.DirectMethodHandleAccessor", "invoke"), // non-public class new CallFrame(Method.class, "invoke"), new CallFrame(Thread.class, "run"),
};
staticvoid getStackTrace(CallFrame[] callStack) { // this method is the top of the stack
callStack[0] = new CallFrame(DumpStackTest.class, "getStackTrace");
staticvoid consumeLambda() {
CallFrame[] callStack = new CallFrame[]{ new CallFrame(Thread.class, "getStackTrace"), new CallFrame(DumpStackTest.class, "consumeLambda"), new CallFrame(DumpStackTest.class, "lambda$testLambda$0"), new CallFrame(DumpStackTest.class, "testLambda"), new CallFrame(DumpStackTest.class, "main"), // if invoked from jtreg new CallFrame("jdk.internal.reflect.DirectMethodHandleAccessor", "invoke"), new CallFrame(Method.class, "invoke"), new CallFrame(Thread.class, "run")
};
assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
DumpStackTest.getStackTrace(callStack);
}
staticvoid methodInvoke() {
CallFrame[] callStack = new CallFrame[] { new CallFrame(Thread.class, "getStackTrace"), new CallFrame(DumpStackTest.class, "methodInvoke"), new CallFrame("jdk.internal.reflect.DirectMethodHandleAccessor", "invoke"), new CallFrame(Method.class, "invoke"), new CallFrame(DumpStackTest.class, "testMethodInvoke"), new CallFrame(DumpStackTest.class, "main"), // if invoked from jtreg new CallFrame("jdk.internal.reflect.DirectMethodHandleAccessor", "invoke"), new CallFrame(Method.class, "invoke"), new CallFrame(Thread.class, "run")
};
assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
DumpStackTest.getStackTrace(callStack);
}
staticvoid methodHandle() {
CallFrame[] callStack = new CallFrame[]{ new CallFrame(Thread.class, "getStackTrace"), new CallFrame(DumpStackTest.class, "methodHandle"), new CallFrame(DumpStackTest.class, "testMethodHandle"), new CallFrame(DumpStackTest.class, "main"), // if invoked from jtreg new CallFrame("jdk.internal.reflect.DirectMethodHandleAccessor", "invoke"), new CallFrame(Method.class, "invoke"), new CallFrame(Thread.class, "run")
};
assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
DumpStackTest.getStackTrace(callStack);
}
for (int i = 0, j = 0; i < actual.length; i++) { // filter test framework classes if (actual[i].getClassName().startsWith("com.sun.javatest.regtest")) continue;
assertEquals(actual[i], expected[j++], i);
}
} staticvoid assertEquals(StackTraceElement actual, CallFrame expected, int idx) { if (!actual.getClassName().equals(expected.getClassName()) ||
!actual.getFileName().equals(expected.getFileName()) ||
!actual.getMethodName().equals(expected.getMethodName())) { thrownew RuntimeException("StackTraceElements mismatch at index " + idx + ". Expected [" + expected + "], but get [" + actual + "]");
}
}
}
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.