/* * Copyright (c) 2001, 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.
*/
/* * This test runs a debuggee with n threads each of which just loops * doing some printlns and calling a method. The debugger sets * bkpts on these methods and verifies that they are all hit. * The default number of threads is 4. To change it to say 10, * pass this to the testcase on the cmd line: * -Dnthreads=10 * The current max allowed value of nthreads is 30. * You can also do this, for example, * -Dnhits=30 * to change the number of times the bkpts are to be hit from * the default of 100 to 30.
*/ import com.sun.jdi.*; import com.sun.jdi.event.*; import com.sun.jdi.request.*;
import java.util.*;
/********** target program **********/
import java.io.*; import java.text.*;
class MultiBreakpointsTarg {
MultiBreakpointsTarg(int numThreads, int numHits) { for (int ii = 0; ii < numThreads; ii++) {
console(ii, numHits);
}
}
publicstaticvoid main(String args[]) {
int nthreads; int nhits;
String nStr = System.getProperty("nthreads");
if (nStr == null) { thrownew RuntimeException("nthreads = null in debuggee");
}
nthreads = Integer.parseInt(nStr);
nStr = System.getProperty("nhits"); if (nStr == null) { thrownew RuntimeException("nhits = null in debuggee");
}
nhits = Integer.parseInt(nStr);
MultiBreakpointsTarg ptr = new MultiBreakpointsTarg(nthreads, nhits);
// for (int i = 0; i < nthreads; i++) { // ptr.console(i); // }
}
// The brute force approach for simplicity - don't use reflection // nor set thread specific bkpts. Use of those features would // make for interesting tests too, and maybe would prove that // we don't really have to bother doing it this dumb way.
void console(finalint num, finalint nhits) { final InputStreamReader isr = new InputStreamReader(System.in); final BufferedReader br = new BufferedReader(isr);
// Create the threads // //final String threadName = "DebuggeeThread: " + num; final String threadName = "" + num; Thread thrd = newThread( threadName ) { publicvoid run() { synchronized( isr ) { boolean done = false; try { // For each thread, run until numHits bkpts have been hit for( int i = 0; i < nhits; i++ ) { // This is a tendril from the original jdb test. // It could probably be deleted.
System.out.println("Thread " + threadName + " Enter a string: ");
String s = "test" + num; switch (num) { case 0: bkpt0(); break; case 1: bkpt1(); break; case 2: bkpt2(); break; case 3: bkpt3(); break; case 4: bkpt4(); break; case 5: bkpt5(); break; case 6: bkpt6(); break; case 7: bkpt7(); break; case 8: bkpt8(); break; case 9: bkpt9(); break; case 10: bkpt10(); break; case 11: bkpt11(); break; case 12: bkpt12(); break; case 13: bkpt13(); break; case 14: bkpt14(); break; case 15: bkpt15(); break; case 16: bkpt16(); break; case 17: bkpt17(); break; case 18: bkpt18(); break; case 19: bkpt19(); break; case 20: bkpt20(); break; case 21: bkpt21(); break; case 22: bkpt22(); break; case 23: bkpt23(); break; case 24: bkpt24(); break; case 25: bkpt25(); break; case 26: bkpt26(); break; case 27: bkpt27(); break; case 28: bkpt28(); break; case 29: bkpt29(); break;
}
System.out.println("Thread " + threadName + " You entered : " + s);
for (int ii = 0 ; ii < nthreads; ii++) {
bkpts[ii] = setBreakpoint("MultiBreakpointsTarg", "bkpt" + ii, "()V");
} /* * resume the target listening for events
*/
listenUntilVMDisconnect();
for ( int ii = 0; ii < nthreads; ii++) { if (hits[ii] != nhits) {
failure("FAILED: Expected " + nhits + " breakpoints for thread " + ii + " but only got "+ hits[ii]);
}
}
/* * deal with results of test * if anything has called failure("foo") testFailed will be true
*/ if (!testFailed) {
println("MultiBreakpointsTest: passed");
} else { thrownew Exception("MultiBreakpointsTest: failed");
}
}
}
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.