/* * Copyright (c) 2002, 2018, 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 4629548 * @summary Deferred StepRequests are lost in multithreaded debuggee * @comment converted from test/jdk/com/sun/jdi/DeferredStepTest.sh * * @library /test/lib * @build DeferredStepTest * @run main/othervm DeferredStepTest
*/
privatestaticclass ThreadData { int lastLine = -1; // line of the last stop int minLine = -1; // min line (-1 means "not known yet") int maxLine = -1; // max line (-1 means "not known yet")
}
private Map<String, ThreadData> threadData = new HashMap<>();
ThreadData data = threadData.get(threadName); if (data == null) {
data = new ThreadData();
threadData.put(threadName, data);
}
processThreadData(threadName, lineNum, data);
}
privatevoid processThreadData(String threadName, int lineNum, ThreadData data) { int lastLine = data.lastLine;
data.lastLine = lineNum; if (lastLine < 0) { // the 1st stop in the thread return;
} if (lineNum == lastLine + 1) { // expected. return;
} if (lineNum < lastLine) { // looks like step to the beginning of the cycle if (data.minLine > 0) { // minLine and maxLine are not set - verify
Asserts.assertEquals(lineNum, data.minLine, threadName + " - minLine");
Asserts.assertEquals(lastLine, data.maxLine, threadName + " - maxLine");
} else { // set minLine/maxLine
data.minLine = lineNum;
data.maxLine = lastLine;
} return;
} thrownew RuntimeException(threadName + " (line " + lineNum + ") - unexpected."
+ " lastLine=" + lastLine + ", minLine=" + data.minLine + ", maxLine=" + data.maxLine);
}
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 und die Messung sind noch experimentell.