Mercurial > hg > truffle
view agent/test/jdi/sagdoit.java @ 11182:fa65fc74eb76
Truffle-DSL: Added test for string-line wrapping (GRAAL-331 #comment added testcase)
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 29 Jul 2013 18:42:53 +0200 |
parents | c18cbe5936b8 |
children |
line wrap: on
line source
/* * Copyright (c) 2002, 2004, 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. * */ import com.sun.jdi.*; import java.util.*; // This just contains a bunch of methods that call various JDI methods. // It is called from the sagtest.java jtreg test to get this info for the standard // JDI and from the sagclient.java test to get this info for the SA JDI. class comparator implements Comparator { public int compare(Object o1, Object o2) { ReferenceType rt1 = (ReferenceType)o1; ReferenceType rt2 = (ReferenceType)o2; return rt1.signature().compareTo(rt2.signature()); } public boolean equals(Object oo) { return false; } } public class sagdoit { VirtualMachine myVm; int margin = 0; static String blanks = " "; static int nblanks = blanks.length(); sagdoit(VirtualMachine vm) { super(); myVm = vm; } void indent(int count) { margin += count; } void pp(String msg) { System.out.println(blanks.substring(nblanks - margin) + msg); } public void doAll() { doThreadGroups(); //System.out.println("NOTE: dumping of class info is disabled in sagdoit.java"); //System.out.println(" just to keep the output small while working on objects"); doClasses(); //fixme jj: uncomment this to see all class info } public void doThreadGroups() { doThreadGroupList(myVm.topLevelThreadGroups()); } private void doThreadGroupList(List groups) { // sort; need a comparator if (groups == null) { return; } Iterator myIter = groups.iterator(); while(myIter.hasNext()) { ThreadGroupReference aGroup = (ThreadGroupReference)myIter.next(); doOneThreadGroup(aGroup); } } public void doOneThreadGroup(ThreadGroupReference xx) { pp("threadGroup:" + xx.name()); indent(4); pp("parent() = " + xx.parent()); pp("threads:"); indent(4); doThreadList(xx.threads()); indent(-4); pp("threadGroups:"); indent(4); doThreadGroupList(xx.threadGroups()); indent(-4); indent(-4); } public void doThreads() { doThreadList(myVm.allThreads()); } public void doThreadList(List threads) { if (threads == null) { return; } Iterator myIter = threads.iterator(); while(myIter.hasNext()) { ThreadReference aThread = (ThreadReference)myIter.next(); doOneThread(aThread); } } public void doOneThread(ThreadReference xx) { pp("Thread: " + xx.name()); indent(4); pp("suspendCount() = " + xx.suspendCount()); //void stop(ObjectReference throwable) throws InvalidTypeException; //void interrupt(); pp("status() = " + xx.status()); pp("isSuspended() = " + xx.isSuspended()); pp("isAtBreakpoint() = " + xx.isAtBreakpoint()); pp("threadGroup() = " + xx.threadGroup()); indent(-4); indent(4); try { List allFrames = xx.frames(); for (int ii = 0; ii < xx.frameCount(); ii++) { StackFrame oneFrame = xx.frame(ii); pp("frame(" + ii + ") = " + oneFrame); doOneFrame(oneFrame); } //List frames(int start, int length) throws IncompatibleThreadStateException; // unsupported List allMonitors = xx.ownedMonitors(); // unsupported pp("currentContendedMonitor() = " + xx.currentContendedMonitor()); } catch (IncompatibleThreadStateException ee) { pp("GOT IncompatibleThreadStateException: " + ee); } indent(-4); } public void doOneFrame(StackFrame frame) { List localVars = null; try { localVars = frame.visibleVariables(); } catch (AbsentInformationException ee) { // we compile with -g so this shouldn't happen return; } indent(4); for (Iterator it = localVars.iterator(); it.hasNext();) { LocalVariable lv = (LocalVariable) it.next(); pp("lv name = " + lv.name() + ", type = " + lv.typeName() + ", sig = " + lv.signature() + ", gsig = " + lv.genericSignature() + ", isVis = " + lv.isVisible(frame) + ", isArg = " + lv.isArgument()); } indent(-4); } public void doClasses() { List myClasses = myVm.allClasses(); myClasses = new ArrayList(myClasses); Collections.sort(myClasses, new comparator()); for (int ii = 0; ii < myClasses.size(); ii++) { // Spec says each is a ReferenceType //System.out.println("class " + (ii + 1) + " is " + myClasses.get(ii)); ReferenceType aClass = (ReferenceType)myClasses.get(ii); System.out.println("class " + (ii + 1) + " is " + aClass.signature()); doOneClass(aClass); // Uncomment this to just do a few classes. //if ( ii > 4) break; } } public void doOneClass(ReferenceType xx) { indent(5); // inherited from Mirror pp("toString() = " + xx.toString()); pp("virtualMachine() = " + xx.virtualMachine()); // inherited from Type pp("name() = " + xx.name()); pp("signature() = " + xx.signature()); // ReferenceType fields doReferenceTypeFields(xx); String className = xx.getClass().getName(); pp("subclass = " + className); Class referenceType = null; Class arrayType = null; Class classType = null; Class interfaceType = null; try { referenceType = Class.forName("com.sun.jdi.ReferenceType"); arrayType = Class.forName("com.sun.jdi.ArrayType"); interfaceType = Class.forName("com.sun.jdi.InterfaceType"); classType = Class.forName("com.sun.jdi.ClassType"); } catch (ClassNotFoundException ee) { } if (referenceType.isInstance(xx)) { pp("ReferenceType fields"); ReferenceType rr = (ReferenceType)xx; if (arrayType.isInstance(xx)) { pp("ArrayType fields"); } if (classType.isInstance(xx)) { pp("ClassType fields"); } if (interfaceType.isInstance(xx)) { pp("InterfaceType fields"); } } indent(-5); } public void doReferenceTypeFields(ReferenceType xx) { Object zz; pp("classLoader() = " + xx.classLoader()); try {zz =xx.sourceName();} catch(AbsentInformationException ee) { zz = ee;} pp("sourceName() = " + zz); try {zz =xx.sourceNames("stratum");} catch(AbsentInformationException ee) { zz = ee;} pp("sourceNames() = " + zz); try {zz =xx.sourcePaths("stratum");} catch(AbsentInformationException ee) { zz = ee;} pp("sourcePaths() = " + zz); //try {zz =xx.sourceDebugExtension();} catch(AbsentInformationException ee) { zz = ee;} pp("sourceDebugExtension() = " + zz); //fixme: jj; should sourceDebugExtension throw UnsupportedOperationException? try {zz =xx.sourceDebugExtension();} catch(Exception ee) { zz = ee;} pp("sourceDebugExtension() = " + zz); // If xx is an array, this can cause a ClassNotLoadedException on the // component type. Is that a JDI bug? pp("isStatic() = " + xx.isStatic()); pp("isAbstract() = " + xx.isAbstract()); pp("isFinal() = " + xx.isFinal()); pp("isPrepared() = " + xx.isPrepared()); pp("isVerified() = " + xx.isVerified()); pp("isInitialized() = " + xx.isInitialized()); pp("failedToInitialize() = " + xx.failedToInitialize()); pp("fields() = " + xx.fields()); pp("visibleFields() = " + xx.visibleFields()); pp("allFields() = " + xx.allFields()); pp("fieldByName(String fieldName) = " + xx.fieldByName("fieldName")); pp("methods() = " + xx.methods()); List meths = xx.methods(); Iterator iter = meths.iterator(); while (iter.hasNext()) { Method mm = (Method)iter.next(); pp(" name/sig:" + mm.name() + "/" + mm.signature()); } pp(" visibleMethods() = " + xx.visibleMethods()); //if (1 == 1) return; pp("allMethods() = " + xx.allMethods()); pp("methodsByName(String name) = " + xx.methodsByName("name")); pp("methodsByName(String name, String signature) = " + xx.methodsByName("name", "signature")); pp("nestedTypes() = " + xx.nestedTypes()); //pp("getValue(Field field) = " + xx.getValue("field")); pp("getValue(Field field) = " + "fixme: jjh"); //pp("getValues(List fields) = " + xx.getValues(new List[] = {"fields"})); pp("getValues(List fields) = " + "fixme: jjh"); pp("classObject() = " + xx.classObject()); //x pp("allLineLocations() = " + xx.allLineLocations()); //x pp("allLineLocations(String stratum, String sourceName) = " + xx.allLineLocations("stratum", "sourceName")); //x pp("locationsOfLine(int lineNumber) = " + xx.locationsOfLine(89)); //x pp("locationsOfLine(String stratum, String sourceName, int lineNumber) = " + xx.locationsOfLine("stratum", "sourceName", 89)); pp("availableStrata() = " + xx.availableStrata()); pp("defaultStratum() = " + xx.defaultStratum()); pp("equals(Object obj) = " + xx.equals(xx)); pp("hashCode() = " + xx.hashCode()); } } // try { // ReferenceType rr = (ReferenceType)xx; // pp("ReferenceType fields"); // try { // ArrayType ff = (ArrayType)xx; // pp("ArrayType fields"); // } catch(ClassCastException ee) { // } // try { // ClassType ff = (ClassType)xx; // pp("ClassType fields"); // } catch(ClassCastException ee) { // } // try { // InterfaceType ff = (InterfaceType)xx; // pp("InterfaceType fields"); // } catch(ClassCastException ee) { // } // } catch(ClassCastException ee) { // }