15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/* 25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements. See the NOTICE file distributed with 45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership. 55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with 75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License. You may obtain a copy of the License at 85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Unless required by applicable law or agreed to in writing, software 125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * See the License for the specific language governing permissions and 165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * limitations under the License. 175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Vitaly A. Provodin 215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework.jdwp; 245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.io.IOException; 265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.ArrayList; 275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.Iterator; 285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.List; 295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.Breakpoint; 315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.LogWriter; 325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException; 335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestOptions; 345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Capabilities; 355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket; 365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Event; 375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.EventMod; 385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants; 395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Location; 405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket; 415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.TransportWrapper; 425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.TypesLengths; 435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.Frame.Variable; 445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.exceptions.ReplyErrorCodeException; 455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.jdwp.exceptions.TimeoutException; 465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/** 485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides convenient way for communicating with debuggee VM using 495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * JDWP packets. 505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p> 515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Most methods can throw ReplyErrorCodeException if error occurred in execution 525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of corresponding JDWP command or TestErrorException if any other error 535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * occurred. 545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class VmMirror { 565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Target VM Capabilities. */ 585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public Capabilities targetVMCapabilities; 595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Transport used to sent and receive packets. */ 615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes private TransportWrapper connection; 625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** PacketDispatcher thread used for asynchronous reading packets. */ 645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes private PacketDispatcher packetDispatcher; 655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Test run options. */ 675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected TestOptions config; 685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** Log to write messages. */ 705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes protected LogWriter logWriter; 715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Creates new VmMirror instance for given test run options. 745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param config 765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * test run options 775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param logWriter 785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * log writer 795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public VmMirror(TestOptions config, LogWriter logWriter) { 815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes connection = null; 825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes this.config = config; 835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes this.logWriter = logWriter; 845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Checks error code of given reply packet and throws 885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ReplyErrorCodeException if any error detected. 895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param reply 915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * reply packet to check 925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket unchanged reply packet 935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket checkReply(ReplyPacket reply) { 955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() != JDWPConstants.Error.NONE) 965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new ReplyErrorCodeException(reply.getErrorCode()); 975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply; 985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint to given location. 1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param typeTag 1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param breakpoint 1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setBreakpoint(byte typeTag, Breakpoint breakpoint) { 1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setBreakpoint(typeTag, breakpoint, 1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPConstants.SuspendPolicy.ALL); 1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint to given location. 1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param typeTag 1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param breakpoint 1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param suspendPolicy 1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Suspend policy for a breakpoint being created 1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setBreakpoint(byte typeTag, Breakpoint breakpoint, 1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy) { 1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get Class reference ID 1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = getTypeID(breakpoint.className, typeTag); 1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get Method reference ID 1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = getMethodID(typeID, breakpoint.methodName); 1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Fill location 1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Location location = new Location(typeTag, typeID, methodID, 1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes breakpoint.index); 1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set breakpoint 1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setBreakpoint(location, suspendPolicy); 1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint to given location. 1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param location 1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Location of breakpoint 1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setBreakpoint(Location location) { 1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setBreakpoint(location, JDWPConstants.SuspendPolicy.ALL); 1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint to given location 1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param location 1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Location of breakpoint 1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param suspendPolicy 1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Suspend policy for a breakpoint being created 1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setBreakpoint(Location location, byte suspendPolicy) { 1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.BREAKPOINT; 1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].loc = location; 1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.LocationOnly; 1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set breakpoint 1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint that triggers only on a certain occurrence to a given 1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * location 1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param typeTag 1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param breakpoint 1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param suspendPolicy 1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Suspend policy for a breakpoint being created 1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param count 1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Limit the requested event to be reported at most once after a 1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * given number of occurrences 1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setCountableBreakpoint(byte typeTag, 1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Breakpoint breakpoint, byte suspendPolicy, int count) { 1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = getTypeID(breakpoint.className, typeTag); 1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get Method reference ID 1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = getMethodID(typeID, breakpoint.methodName); 1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.BREAKPOINT; 1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod mod1 = new EventMod(); 1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mod1.modKind = EventMod.ModKind.LocationOnly; 1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mod1.loc = new Location(typeTag, typeID, methodID, breakpoint.index); 1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod mod2 = new EventMod(); 2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mod2.modKind = EventMod.ModKind.Count; 2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mod2.count = count; 2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { mod1, mod2 }; 2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set breakpoint 2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets breakpoint at the beginning of method with name <i>methodName</i>. 2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * id of class with required method 2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodName 2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * name of required method 2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return requestID id of request 2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long setBreakpointAtMethodBegin(long classID, String methodName) { 2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long requestID; 2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = getMethodID(classID, methodName); 2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket lineTableReply = getLineTable(classID, methodID); 2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (lineTableReply.getErrorCode() != JDWPConstants.Error.NONE) { 2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Command getLineTable returned error code: " 2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + lineTableReply.getErrorCode() 2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " - " 2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + JDWPConstants.Error.getName(lineTableReply 2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getErrorCode())); 2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes lineTableReply.getNextValueAsLong(); 2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Lowest valid code index for the method 2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes lineTableReply.getNextValueAsLong(); 2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Highest valid code index for the method 2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // int numberOfLines = 2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes lineTableReply.getNextValueAsInt(); 2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long lineCodeIndex = lineTableReply.getNextValueAsLong(); 2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // set breakpoint inside checked method 2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Location breakpointLocation = new Location(JDWPConstants.TypeTag.CLASS, 2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes classID, methodID, lineCodeIndex); 2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = setBreakpoint(breakpointLocation); 2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(reply); 2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes requestID = reply.getNextValueAsInt(); 2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return requestID; 2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for stop on breakpoint and gets id of thread where it stopped. 2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param requestID 2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * id of request for breakpoint 2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return threadID id of thread, where we stop on breakpoint 2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long waitForBreakpoint(long requestID) { 2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // receive event 2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket event = null; 2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event = receiveEvent(); 2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event.getNextValueAsByte(); 2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // suspendPolicy - is not used here 2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // int numberOfEvents = 2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes event.getNextValueAsInt(); 2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long breakpointThreadID = 0; 2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ParsedEvent[] eventParsed = ParsedEvent.parseEventPacket(event); 2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (eventParsed.length != 1) { 2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException("Received " + eventParsed.length 2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + " events instead of 1 BREAKPOINT_EVENT"); 2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // check if received event is for breakpoint 2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (eventParsed[0].getEventKind() == JDWPConstants.EventKind.BREAKPOINT) { 2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes breakpointThreadID = ((ParsedEvent.Event_BREAKPOINT) eventParsed[0]) 2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getThreadID(); 2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Kind of received event is not BREAKPOINT_EVENT: " 2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + eventParsed[0].getEventKind()); 2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (eventParsed[0].getRequestID() != requestID) { 2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Received BREAKPOINT_EVENT with another requestID: " 2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + eventParsed[0].getRequestID()); 3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return breakpointThreadID; 3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Removes breakpoint according to specified requestID. 3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param requestID 3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * for given breakpoint 3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket clearBreakpoint(int requestID) { 3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command. "2" - is ID of Clear command in EventRequest Command Set 3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.EventRequestCommandSet.ClearCommand); 3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command set. "15" - is ID of EventRequest Command Set 3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.EventRequestCommandSet.CommandSetID); 3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set outgoing data 3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set eventKind 3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsByte(JDWPConstants.EventKind.BREAKPOINT); 3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set suspendPolicy 3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(requestID); 3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Removes all breakpoints. 3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket ClearAllBreakpoints() { 3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command. "3" - is ID of ClearAllBreakpoints command in 3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventRequest Command Set 3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.EventRequestCommandSet.ClearAllBreakpointsCommand); 3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command set. "15" - is ID of EventRequest Command Set 3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.EventRequestCommandSet.CommandSetID); 3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Requests debuggee VM capabilities. Function parses reply packet of 3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * VirtualMachine::CapabilitiesNew command, creates and fills class 3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Capabilities with returned info. 3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket useless, already parsed reply packet. 3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket capabilities() { 3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command. "17" - is ID of CapabilitiesNew command in 3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // VirtualMachine Command Set 3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.VirtualMachineCommandSet.CapabilitiesNewCommand); 3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command set. "1" - is ID of VirtualMachine Command Set 3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.VirtualMachineCommandSet.CommandSetID); 3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities = new Capabilities(); 3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set capabilities 3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canWatchFieldModification = replyPacket 3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canWatchFieldAccess = replyPacket 3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetBytecodes = replyPacket 3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetSyntheticAttribute = replyPacket 3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetOwnedMonitorInfo = replyPacket 3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetCurrentContendedMonitor = replyPacket 3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetMonitorInfo = replyPacket 3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canRedefineClasses = replyPacket 4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canAddMethod = replyPacket.getNextValueAsBoolean(); 4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canUnrestrictedlyRedefineClasses = replyPacket 4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canPopFrames = replyPacket.getNextValueAsBoolean(); 4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canUseInstanceFilters = replyPacket 4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetSourceDebugExtension = replyPacket 4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canRequestVMDeathEvent = replyPacket 4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canSetDefaultStratum = replyPacket 4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetInstanceInfo = replyPacket 4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved17 = replyPacket.getNextValueAsBoolean(); 4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetMonitorFrameInfo = replyPacket 4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canUseSourceNameFilters = replyPacket.getNextValueAsBoolean(); 4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canGetConstantPool = replyPacket 4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.canForceEarlyReturn = replyPacket 4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsBoolean(); 4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved22 = replyPacket.getNextValueAsBoolean(); 4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved23 = replyPacket.getNextValueAsBoolean(); 4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved24 = replyPacket.getNextValueAsBoolean(); 4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved25 = replyPacket.getNextValueAsBoolean(); 4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved26 = replyPacket.getNextValueAsBoolean(); 4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved27 = replyPacket.getNextValueAsBoolean(); 4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved28 = replyPacket.getNextValueAsBoolean(); 4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved29 = replyPacket.getNextValueAsBoolean(); 4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved30 = replyPacket.getNextValueAsBoolean(); 4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved31 = replyPacket.getNextValueAsBoolean(); 4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes targetVMCapabilities.reserved32 = replyPacket.getNextValueAsBoolean(); 4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket; 4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4393df0c797781000302737ead55196b6e110d8db9cSebastien Hertz public boolean canWatchFieldModification() { 4403df0c797781000302737ead55196b6e110d8db9cSebastien Hertz capabilities(); 4413df0c797781000302737ead55196b6e110d8db9cSebastien Hertz return targetVMCapabilities.canWatchFieldModification; 4423df0c797781000302737ead55196b6e110d8db9cSebastien Hertz } 4433df0c797781000302737ead55196b6e110d8db9cSebastien Hertz 4443df0c797781000302737ead55196b6e110d8db9cSebastien Hertz public boolean canWatchFieldAccess() { 4453df0c797781000302737ead55196b6e110d8db9cSebastien Hertz capabilities(); 4463df0c797781000302737ead55196b6e110d8db9cSebastien Hertz return targetVMCapabilities.canWatchFieldAccess; 4473df0c797781000302737ead55196b6e110d8db9cSebastien Hertz } 4483df0c797781000302737ead55196b6e110d8db9cSebastien Hertz 4493df0c797781000302737ead55196b6e110d8db9cSebastien Hertz public boolean canUseInstanceFilters() { 4503df0c797781000302737ead55196b6e110d8db9cSebastien Hertz capabilities(); 4513df0c797781000302737ead55196b6e110d8db9cSebastien Hertz return targetVMCapabilities.canUseInstanceFilters; 4523df0c797781000302737ead55196b6e110d8db9cSebastien Hertz } 4533df0c797781000302737ead55196b6e110d8db9cSebastien Hertz 4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Resumes debuggee VM. 4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket resume() { 4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.ResumeCommand); 4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Resumes specified thread on target Virtual Machine 4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket resumeThread(long threadID) { 4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ResumeCommand); 4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(threadID); 4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Suspends debuggee VM. 4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket suspend() { 4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.SuspendCommand); 4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Suspends specified thread in debuggee VM. 4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 4995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket suspendThread(long threadID) { 5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.SuspendCommand); 5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(threadID); 5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 5065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 5095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Disposes connection to debuggee VM. 5105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 5115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 5125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 5135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket dispose() { 5145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 5155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 5165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.VirtualMachineCommandSet.DisposeCommand); 5185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.VirtualMachineCommandSet.CommandSetID); 5205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 5225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 5235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 5245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 5265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Exits debuggee VM process. 5275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 5285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 5295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 5305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket exit(int exitCode) { 5315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 5325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 5335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.VirtualMachineCommandSet.ExitCommand); 5355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.VirtualMachineCommandSet.CommandSetID); 5375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(exitCode); 5385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 5405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 5415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 5425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 5445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Adjusts lengths for all VM-specific types. 5455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 5465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 5475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 5485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket adjustTypeLength() { 5495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 5505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 5515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.VirtualMachineCommandSet.IDSizesCommand); 5535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 5545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.VirtualMachineCommandSet.CommandSetID); 5555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 5575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 5585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get FieldIDSize from ReplyPacket 5605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.FIELD_ID, replyPacket 5615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsInt()); 5625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get MethodIDSize from ReplyPacket 5645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.METHOD_ID, replyPacket 5655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsInt()); 5665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get ObjectIDSize from ReplyPacket 5685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.OBJECT_ID, replyPacket 5695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsInt()); 5705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get ReferenceTypeIDSize from ReplyPacket 5725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.REFERENCE_TYPE_ID, replyPacket 5735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsInt()); 5745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get FrameIDSize from ReplyPacket 5765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.FRAME_ID, replyPacket 5775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getNextValueAsInt()); 5785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Adjust all other types lengths 5805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.ARRAY_ID, TypesLengths 5815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.STRING_ID, TypesLengths 5835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.THREAD_ID, TypesLengths 5855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.THREADGROUP_ID, TypesLengths 5875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.LOCATION_ID, TypesLengths 5895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.CLASS_ID, TypesLengths 5915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.CLASSLOADER_ID, TypesLengths 5935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TypesLengths.setTypeLength(TypesLengths.CLASSOBJECT_ID, TypesLengths 5955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getTypeLength(TypesLengths.OBJECT_ID)); 5965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket; 5975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 5985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 5995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets TypeID for specified type signature and type tag. 6015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 6025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param typeSignature 6035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * type signature 6045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classTypeTag 6055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * type tag 6065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received TypeID 6075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 6085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getTypeID(String typeSignature, byte classTypeTag) { 6095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int classes = 0; 6105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte refTypeTag = 0; 6115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = -1; 6125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for exception 6145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket classReference = getClassBySignature(typeSignature); 6155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get referenceTypeID from received packet 6175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes classes = classReference.getNextValueAsInt(); 6185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < classes; i++) { 6195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes refTypeTag = classReference.getNextValueAsByte(); 6205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (refTypeTag == classTypeTag) { 6215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes typeID = classReference.getNextValueAsReferenceTypeID(); 6225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes classReference.getNextValueAsInt(); 6235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 6245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 6255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes classReference.getNextValueAsReferenceTypeID(); 6265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes classReference.getNextValueAsInt(); 6275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes refTypeTag = 0; 6285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return typeID; 6315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets ClassID for specified class signature. 6355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 6365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 6375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature 6385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ClassID 6395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 6405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getClassID(String classSignature) { 6415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return getTypeID(classSignature, JDWPConstants.TypeTag.CLASS); 6425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets ThreadID for specified thread name. 6465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 6475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadName 6485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * thread name 6495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ThreadID 6505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 6515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getThreadID(String threadName) { 6525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket request = null; 6535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long threadID = -1; 6545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long thread = -1; 6555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String name = null; 6565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int threads = -1; 6575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get All Threads IDs 6595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request = getAllThreadID(); 6605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get thread ID for threadName 6625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threads = request.getNextValueAsInt(); 6635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < threads; i++) { 6645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes thread = request.getNextValueAsThreadID(); 6655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes name = getThreadName(thread); 6665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (threadName.equals(name)) { 6675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes threadID = thread; 6685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 6695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return threadID; 6735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns all running thread IDs. 6775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 6785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received reply packet 6795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 6805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket getAllThreadID() { 6815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 6825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 6835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 6845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.AllThreadsCommand); 6855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 6875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 6885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 6895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 6905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets class signature for specified class ID. 6915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 6925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 6935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class ID 6945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received class signature 6955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 6965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public String getClassSignature(long classID) { 6975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 6985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 6995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 7005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.SignatureCommand); 7015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsReferenceTypeID(classID); 7025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 7035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket.getNextValueAsString(); 7045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns thread name for specified <code>threadID</code>. 7085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 7105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * thread ID 7115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return thread name 7125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public String getThreadName(long threadID) { 7145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 7155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 7165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 7175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.NameCommand); 7185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(threadID); 7195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 7205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket.getNextValueAsString(); 7215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns thread status for specified <code>threadID</code>. 7255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 7275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * thread ID 7285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return thread status 7295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public int getThreadStatus(long threadID) { 7315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 7325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 7335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 7345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(threadID); 7355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 7365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket.getNextValueAsInt(); 7375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns name of thread group for specified <code>groupID</code> 7415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param groupID 7435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * thread group ID 7445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return name of thread group 7465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public String getThreadGroupName(long groupID) { 7485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 7495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 7505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadGroupReferenceCommandSet.CommandSetID, 7515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadGroupReferenceCommandSet.NameCommand); 7525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsReferenceTypeID(groupID); 7535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = checkReply(performCommand(commandPacket)); 7545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket.getNextValueAsString(); 7555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets InterfaceID for specified interface signature. 7595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param interfaceSignature 7615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * interface signature 7625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ClassID 7635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getInterfaceID(String interfaceSignature) { 7655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return getTypeID(interfaceSignature, JDWPConstants.TypeTag.INTERFACE); 7665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets ArrayID for specified array signature. 7705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param arraySignature 7725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * array signature 7735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ArrayID 7745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getArrayID(String arraySignature) { 7765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return getTypeID(arraySignature, JDWPConstants.TypeTag.INTERFACE); 7775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets RequestID from specified ReplyPacket. 7815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param request 7835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ReplyPacket with RequestID 7845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received RequestID 7855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public int getRequestID(ReplyPacket request) { 7875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return request.getNextValueAsInt(); 7885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 7895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 7905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 7915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns FieldID for specified class and field name. 7925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 7935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 7945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ClassID to find field 7955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldName 7965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * field name 7975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received FieldID 7985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 7995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getFieldID(long classID, String fieldName) { 8005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = getFieldsInClass(classID); 8015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return getFieldID(reply, fieldName); 8025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 8055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets FieldID from ReplyPacket. 8065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 8075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param request 8085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ReplyPacket for request 8095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param field 8105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * field name to get ID for 8115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received FieldID 8125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 8135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getFieldID(ReplyPacket request, String field) { 8145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long fieldID = -1; 8155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String fieldName; 8165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get fieldID from received packet 8175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int count = request.getNextValueAsInt(); 8185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < count; i++) { 8195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldID = request.getNextValueAsFieldID(); 8205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldName = request.getNextValueAsString(); 8215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (field.equals(fieldName)) { 8225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request.getNextValueAsString(); 8235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request.getNextValueAsInt(); 8245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 8255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 8265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request.getNextValueAsString(); 8275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request.getNextValueAsInt(); 8285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldID = 0; 8295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldName = null; 8305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return fieldID; 8335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 8365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets Method ID for specified class and method name. 8375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 8385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 8395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class to find method 8405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodName 8415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * method name 8425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received MethodID 8435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 8445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public long getMethodID(long classID, String methodName) { 8455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply; 8465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int declared = 0; 8475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String method = null; 8485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = -1; 8495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get Method reference ID 8515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = getMethods(classID); 8525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get methodID from received packet 8545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes declared = reply.getNextValueAsInt(); 8555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < declared; i++) { 8565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes methodID = reply.getNextValueAsMethodID(); 8575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes method = reply.getNextValueAsString(); 8585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (methodName.equals(method)) { 8595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // If this method name is the same as requested 8605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsString(); 8615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); 8625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 8635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 8645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // If this method name is not the requested one 8655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsString(); 8665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); 8675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes methodID = -1; 8685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes method = null; 8695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return methodID; 8725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 8735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 8755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns method name for specified pair of classID and methodID. 8765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 8775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 8785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 8795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return method name 8805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 8815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public String getMethodName(long classID, long methodID) { 8825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket packet = new CommandPacket( 8835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 8845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.MethodsCommand); 8855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packet.setNextValueAsReferenceTypeID(classID); 8865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = performCommand(packet); 8875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 8885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int declared = reply.getNextValueAsInt(); 8895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long mID; 8905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String value = null; 8915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String methodName = ""; 8925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < declared; i++) { 8935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mID = reply.getNextValueAsMethodID(); 8945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes methodName = reply.getNextValueAsString(); 8955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsString(); 8965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); 8975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (mID == methodID) { 8985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes value = methodName; 8995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 9005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return value; 9035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 9065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets ClassPrepare event request for given class name pattern. 9075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 9085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 9095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Required class pattern. Matches are limited to exact matches 9105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given class pattern and matches of patterns that begin 9115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 9125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 9135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 9145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassPrepared(String classRegexp) { 9155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 9165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_PREPARE; 9175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 9185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 9195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 9205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 9215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 9225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 9235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 9255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 9265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 9295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set ClassPrepare event request for given class ID. 9305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 9315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 9325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 9335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 9345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 9355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassPrepared(long referenceTypeID) { 9365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 9375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_PREPARE; 9385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 9395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 9405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 9415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 9425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 9435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 9445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 9465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 9475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 9505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets ClassPrepare event request for given source name pattern. 9515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 9525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param sourceNamePattern 9535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Required source name pattern. Matches are limited to exact matches 9545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given source name pattern and matches of patterns that begin 9555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 9565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 9575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 9585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassPreparedForSourceNameMatch(String sourceNamePattern) { 9595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 9605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_PREPARE; 9615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 9625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 9635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].sourceNamePattern = sourceNamePattern; 9645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.SourceNameMatch; 9655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 9665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 9685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 9695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 9725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets ClassUnload event request for given class name pattern. 9735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 9745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 9755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature 9765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 9775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 9785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassUnload(String classRegexp) { 9795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 9805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_UNLOAD; 9815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 9825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 9835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 9845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 9855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 9865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 9875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 9895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 9905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 9915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 9925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 9935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set ClassUnload event request for given class ID. 9945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 9955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 9965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 9975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 9985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 9995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassUnload(long referenceTypeID) { 10005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 10015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_UNLOAD; 10025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 10035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 10045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 10055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 10065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 10075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 10085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 10105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 10115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 10125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 10145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets ClassLoad event request for given class signature. 10155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 10165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 10175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature 10185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 10195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 10205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassLoad(String classSignature) { 10215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID; 10225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for class 10245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes typeID = getClassID(classSignature); 10255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set corresponding event 10275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setClassLoad(typeID); 10285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 10295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 10315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set ClassLoad event request for given class ID. 10325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 10335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 10345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 10355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 10365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 10375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setClassLoad(long referenceTypeID) { 10385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 10395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.CLASS_LOAD; 10405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 10415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 10425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 10435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 10445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 10455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 10475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 10485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 10495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 10515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorContendedEnter event request for given class's reference type 10525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 10535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 10545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 10555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 10565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 10575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorContendedEnterForClassOnly(long referenceTypeID) { 10585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 10595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_CONTENDED_ENTER; 10605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 10615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 10625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 10635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 10645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 10655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 10675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 10685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 10695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorContendedEnterForClassMatch(String classRegexp) { 10715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 10725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_CONTENDED_ENTER; 10735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 10745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 10755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 10765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 10775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 10785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 10805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 10815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 10825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 10845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorContendedEntered event request for given class's reference type 10855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 10865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 10875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 10885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 10895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 10905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorContendedEnteredForClassOnly(long referenceTypeID) { 10915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 10925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_CONTENDED_ENTERED; 10935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 10945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 10955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 10965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 10975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 10985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 10995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 11025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorContendedEnteredForClassMatch(String classRegexp) { 11045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 11055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_CONTENDED_ENTERED; 11065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 11075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 11085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 11095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 11105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 11115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 11155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 11175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWait event request for given class's reference type 11185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 11195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 11205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 11215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 11225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 11235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitForClassOnly(long referenceTypeID) { 11245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 11255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAIT; 11265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 11275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 11285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 11295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 11305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 11315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 11355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 11375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWait event request for given given class name pattern. 11385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 11395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 11405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Required class pattern. Matches are limited to exact matches 11415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given class pattern and matches of patterns that begin 11425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 11435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 11445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 11455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitForClassMatch(String classRegexp) { 11465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 11475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAIT; 11485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 11495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 11505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 11515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 11525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 11535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 11575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 11595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWait event request for classes 11605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * whose name does not match the given restricted regular expression. 11615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 11625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 11635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Exclude class pattern. Matches are limited to exact matches 11645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given class pattern and matches of patterns that begin 11655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 11665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 11675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 11685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitForClassExclude (String classRegexp) { 11695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 11705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAIT; 11715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 11725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 11735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 11745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassExclude; 11755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 11765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 11805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 11825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWaited event request for given class's reference type 11835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 11845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 11855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID 11865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 11875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 11885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitedForClassOnly(long referenceTypeID) { 11895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 11905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAITED; 11915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 11925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 11935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].clazz = referenceTypeID; 11945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassOnly; 11955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 11965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 11975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 11985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 11995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 12025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWaited event request for given given source name pattern. 12035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 12045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 12055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Required class pattern. Matches are limited to exact matches 12065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given class pattern and matches of patterns that begin 12075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 12085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 12095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 12105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitedForClassMatch(String classRegexp) { 12115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 12125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAITED; 12135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 12145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 12155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 12165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 12175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 12185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 12205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 12215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 12245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set MonitorWaited event request for classes 12255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * whose name does not match the given restricted regular expression. 12265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 12275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 12285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Required class pattern. Matches are limited to exact matches 12295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * of the given class pattern and matches of patterns that begin 12305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * or end with '*'; for example, "*.Foo" or "java.*". 12315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 12325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 12335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMonitorWaitedForClassExclude (String classRegexp) { 12345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 12355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.MONITOR_WAITED; 12365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 12375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 12385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 12395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassExclude; 12405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 12415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 12435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 12445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 12475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Set event request for given event. 12485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 12495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param event 12505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * event to set request for 12515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request 12525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 12535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setEvent(Event event) { 12545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 12555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 12565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.CommandSetID, 12575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.EventRequestCommandSet.SetCommand); 12585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set eventKind 12605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsByte(event.eventKind); 12615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set suspendPolicy 12625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsByte(event.suspendPolicy); 12635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set modifiers 12655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(event.modifiers); 12665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < event.modifiers; i++) { 12685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsByte(event.mods[i].modKind); 12705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 12715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes switch (event.mods[i].modKind) { 12725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.Count: { 12735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case Count 12745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(event.mods[i].count); 12755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 12765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.Conditional: { 12785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case Conditional 12795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(event.mods[i].exprID); 12805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 12815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.ThreadOnly: { 12835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case ThreadOnly 12845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(event.mods[i].thread); 12855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 12865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.ClassOnly: { 12885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case ClassOnly 12895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 12905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setNextValueAsReferenceTypeID(event.mods[i].clazz); 12915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 12925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.ClassMatch: { 12945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case ClassMatch 12955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsString(event.mods[i].classPattern); 12965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 12975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 12985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.ClassExclude: { 12995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case ClassExclude 13005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsString(event.mods[i].classPattern); 13015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.LocationOnly: { 13045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case LocationOnly 13055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsLocation(event.mods[i].loc); 13065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.ExceptionOnly: 13095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case ExceptionOnly 13105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 13115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setNextValueAsReferenceTypeID(event.mods[i].exceptionOrNull); 13125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsBoolean(event.mods[i].caught); 13135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsBoolean(event.mods[i].uncaught); 13145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.FieldOnly: { 13165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case FieldOnly 13175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 13185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setNextValueAsReferenceTypeID(event.mods[i].declaring); 13195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsFieldID(event.mods[i].fieldID); 13205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.Step: { 13235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case Step 13245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsThreadID(event.mods[i].thread); 13255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(event.mods[i].size); 13265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(event.mods[i].depth); 13275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.InstanceOnly: { 13305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case InstanceOnly 13315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsObjectID(event.mods[i].instance); 13325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 13335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case EventMod.ModKind.SourceNameMatch: { 13355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Case SourceNameMatch 13365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsString(event.mods[i].sourceNamePattern); 13375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 13425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 13435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 13465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets method reference by signature. 13475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 13485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classReferenceTypeID 13495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID. 13505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 13515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 13525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket getMethods(long classReferenceTypeID) { 13535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 13545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 13555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command. "5" - is ID of Methods command in ReferenceType Command 13575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set 13585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 13595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.ReferenceTypeCommandSet.MethodsCommand); 13605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command set. "2" - is ID of ReferenceType Command Set 13625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 13635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.ReferenceTypeCommandSet.CommandSetID); 13645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set outgoing data 13665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set referenceTypeID 13675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsObjectID(classReferenceTypeID); 13685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 13705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 13715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 13745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets class reference by signature. 13755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 13765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 13775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature. 13785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 13795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 13805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket getClassBySignature(String classSignature) { 13815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 13825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 13835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.ClassesBySignatureCommand); 13845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsString(classSignature); 13855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 13865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 13875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 13885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 13895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Gets class fields by class referenceTypeID. 13905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 13915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param referenceTypeID 13925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class referenceTypeID. 13935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 13945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 13955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket getFieldsInClass(long referenceTypeID) { 13965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket( 13975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 13985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.FieldsCommand); 13995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsReferenceTypeID(referenceTypeID); 14005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 14015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 14025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 14045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets exception event request for given exception class signature. 14055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 14065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param exceptionSignature 14075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * exception signature. 14085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param caught 14095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception caught 14105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param uncaught 14115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception uncaught 14125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 14135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 14145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setException(String exceptionSignature, boolean caught, 14155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean uncaught) { 14165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for exception 14175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = getClassID(exceptionSignature); 14185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setException(typeID, caught, uncaught); 14195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 14205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 14225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets exception event request for given exception class ID. 14235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 14245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param exceptionID 14255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * exception referenceTypeID. 14265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param caught 14275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception caught 14285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param uncaught 14295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception uncaught 14305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 14315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 14325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setException(long exceptionID, boolean caught, 14335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean uncaught) { 14345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 14355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.EXCEPTION; 14365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 14375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[1]; 14385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 14395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ExceptionOnly; 14405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].caught = caught; 14415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].uncaught = uncaught; 14425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].exceptionOrNull = exceptionID; 14435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 14445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 14465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 14475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 14495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets exception event request for given exception class signature. 14505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 14515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param exceptionSignature 14525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * exception signature. 14535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param caught 14545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception caught 14555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param uncaught 14565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is exception uncaught 14575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param count 14585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Limit the requested event to be reported at most once after a 14595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * given number of occurrences 14605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 14615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 14625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setCountableException(String exceptionSignature, 14635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes boolean caught, boolean uncaught, int count) { 14645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for exception 14655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long exceptionID = getClassID(exceptionSignature); 14665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.EXCEPTION; 14675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 14685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[2]; 14695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 14705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ExceptionOnly; 14715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].caught = caught; 14725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].uncaught = uncaught; 14735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].exceptionOrNull = exceptionID; 14745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1] = new EventMod(); 14765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].modKind = EventMod.ModKind.Count; 14775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].count = count; 14785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 14795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 14815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 14825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 14835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 14845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets METHOD_ENTRY event request for specified class name pattern. 14855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 14865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 14875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class name pattern or null for no pattern 14885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 14895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 14905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 14915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMethodEntry(String classRegexp) { 14925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 14935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.METHOD_ENTRY; 14945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 14955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = null; 14965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (classRegexp == null) { 14975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[0]; 14985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 14995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[1]; 15005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 15015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 15025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 15035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 15055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 15075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 15105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets METHOD_ENTRY event request for specified class name pattern. 15115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 15135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class name pattern or null for no pattern 15145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param count 15155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Limit the requested event to be reported at most once after a 15165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * given number of occurrences 15175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 15185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 15195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setCountableMethodEntry(String classRegexp, int count) { 15205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.METHOD_ENTRY; 15215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 15225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = null; 15235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (classRegexp == null) { 15245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[] { new EventMod() }; 15255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.Count; 15265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].count = count; 15275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 15285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[2]; 15295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 15305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 15315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 15325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1] = new EventMod(); 15345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].modKind = EventMod.ModKind.Count; 15355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].count = count; 15365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 15385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 15405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 15435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets METHOD_EXIT event request for specified class name pattern. 15445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 15465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class name pattern or null for no pattern 15475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 15495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 15505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMethodExit(String classRegexp) { 15515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 15525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.METHOD_EXIT; 15535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 15545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = null; 15555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (classRegexp == null) { 15565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[0]; 15575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 15585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[1]; 15595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 15605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 15615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 15625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 15645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 15665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 15695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets METHOD_EXIT_WITH_RETURN_VALUE event request for specified class name pattern. 15705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 15725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class name pattern or null for no pattern 15735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 15755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 15765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setMethodExitWithReturnValue(String classRegexp) { 15775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 15785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE; 15795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 15805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = null; 15815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (classRegexp == null) { 15825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[0]; 15835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 15845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[1]; 15855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 15865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 15875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 15885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 15905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 15925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 15935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 15945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 15955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets METHOD_EXIT event request for specified class name pattern. 15965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 15975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 15985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * classRegexp class name pattern or null for no pattern 15995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param count 16005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Limit the requested event to be reported at most once after a 16015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * given number of occurrences 16025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 16035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 16045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setCountableMethodExit(String classRegexp, int count) { 16055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.METHOD_EXIT; 16065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 16075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = null; 16085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (classRegexp == null) { 16095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[] { new EventMod() }; 16105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.Count; 16115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].count = count; 16125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } else { 16135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods = new EventMod[2]; 16145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0] = new EventMod(); 16155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.ClassMatch; 16165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].classPattern = classRegexp; 16175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1] = new EventMod(); 16195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].modKind = EventMod.ModKind.Count; 16205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[1].count = count; 16215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 16225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 16235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 16255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 16275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 16295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets field access event request for specified class signature and field 16305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * name. 16315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 16325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classTypeTag 16335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class Type Tag (class/interface/array) 16345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 16355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature 16365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldName 16375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * field name 16385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket if breakpoint is set 16395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws ReplyErrorCodeException 16405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 16415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setFieldAccess(String classSignature, byte classTypeTag, 16425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String fieldName) throws ReplyErrorCodeException { 16435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket request = null; 16445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = -1; 16455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long fieldID = -1; 16465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for class 16485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes typeID = getClassID(classSignature); 16495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request fields in class 16515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request = getFieldsInClass(typeID); 16525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get fieldID from received packet 16545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldID = getFieldID(request, fieldName); 16555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 16575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.FIELD_ACCESS; 16585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 16595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 16605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 16615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].fieldID = fieldID; 16625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].declaring = typeID; 16635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.FieldOnly; 16645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 16655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set exception 16675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 16685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 16695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 16715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets field modification event request for specified class signature and 16725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * field name. 16735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 16745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classTypeTag 16755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class Type Tag (class/interface/array) 16765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classSignature 16775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * class signature 16785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldName 16795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * field name 16805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 16815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws ReplyErrorCodeException 16825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 16835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setFieldModification(String classSignature, 16845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte classTypeTag, String fieldName) throws ReplyErrorCodeException { 16855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket request = null; 16865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = -1; 16875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long fieldID = -1; 16885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for class 16905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes typeID = getClassID(classSignature); 16915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request fields in class 16935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes request = getFieldsInClass(typeID); 16945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Get fieldID from received packet 16965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fieldID = getFieldID(request, fieldName); 16975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 16985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 16995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.FIELD_MODIFICATION; 17005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 17015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 17025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 17035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].fieldID = fieldID; 17045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].declaring = typeID; 17055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.FieldOnly; 17065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 17075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 17095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 17105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 17115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 17135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets step event request for given thread name. 17145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 17155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadName 17165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * thread name 17175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param stepSize 17185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param stepDepth 17195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 17205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 17215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setStep(String threadName, int stepSize, int stepDepth) { 17225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long typeID = -1; 17235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Request referenceTypeID for class 17255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes typeID = getThreadID(threadName); 17265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 17285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.SINGLE_STEP; 17295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 17305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // EventMod[] mods = new EventMod[1]; 17315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[] { new EventMod() }; 17325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].thread = typeID; 17335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].modKind = EventMod.ModKind.Step; 17345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].size = stepSize; 17355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[0].depth = stepDepth; 17365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 17375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 17395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 17405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 17415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 17435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets SINGLE_STEP event request for classes whose name does not match the 17445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * given restricted regular expression 17455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 17465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classRegexp 17475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Disallowed class patterns. Matches are limited to exact 17485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * matches of the given class pattern and matches of patterns 17495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * that begin or end with '*'; for example, "*.Foo" or "java.*". 17505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param stepSize 17515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param stepDepth 17525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for setting request. 17535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 17545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setStep(String[] classRegexp, long threadID, 17555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int stepSize, int stepDepth) { 17565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 17575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.SINGLE_STEP; 17585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 17595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int modsSize = classRegexp.length + 1; 17605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[modsSize]; 17615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < classRegexp.length; i++) { 17625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[i] = new EventMod(); 17635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[i].classPattern = classRegexp[i]; 17645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[i].modKind = EventMod.ModKind.ClassExclude; 17655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 17665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int index = modsSize - 1; 17685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[index] = new EventMod(); 17695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[index].modKind = EventMod.ModKind.Step; 17705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[index].thread = threadID; 17715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[index].size = stepSize; 17725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes mods[index].depth = stepDepth; 17735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 17755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event 17775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 17785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 17795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 17815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets THREAD_START event request. 17825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 17835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 17845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 17855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setThreadStart() { 17865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 17875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.THREAD_START; 17885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 17895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[0]; 17905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 17915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 17935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 17945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 17955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 17965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets THREAD_END event request. 17975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 17985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 17995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 18005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket setThreadEnd() { 18015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Prepare corresponding event 18025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte eventKind = JDWPConstants.EventKind.THREAD_END; 18035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes byte suspendPolicy = JDWPConstants.SuspendPolicy.ALL; 18045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventMod[] mods = new EventMod[0]; 18055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Event event = new Event(eventKind, suspendPolicy, mods); 18065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return setEvent(event); 18085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 18095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 18115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Clear an event request for specified request ID. 18125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 18135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param eventKind 18145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * event type to clear 18155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param requestID 18165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * request ID to clear 18175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 18185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 18195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket clearEvent(byte eventKind, int requestID) { 18205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Create new command packet 18215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket commandPacket = new CommandPacket(); 18225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command. "2" - is ID of Clear command in EventRequest Command Set 18245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 18255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommand(JDWPCommands.EventRequestCommandSet.ClearCommand); 18265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set command set. "15" - is ID of EventRequest Command Set 18285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket 18295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .setCommandSet(JDWPCommands.EventRequestCommandSet.CommandSetID); 18305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set outgoing data 18325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set event type to clear 18335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsByte(eventKind); 18345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Set ID of request to clear 18365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes commandPacket.setNextValueAsInt(requestID); 18375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // Send packet 18395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(commandPacket)); 18405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 18415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 18435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sends CommandPacket to debuggee VM and waits for ReplyPacket using 18445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * default timeout. All thrown exceptions are wrapped into 18455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * TestErrorException. Consider using checkReply() for checking error code 18465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * in reply packet. 18475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 18485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param command 18495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Command packet to be sent 18505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ReplyPacket 18515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 18525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket performCommand(CommandPacket command) 18535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throws TestErrorException { 18545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket replyPacket = null; 18555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 18565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes replyPacket = packetDispatcher.performCommand(command); 18575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (IOException e) { 18585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException(e); 18595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (InterruptedException e) { 18605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException(e); 18615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 18625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return replyPacket; 18645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 18655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 18675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sends CommandPacket to debuggee VM and waits for ReplyPacket using 18685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * specified timeout. 18695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 18705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param command 18715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Command packet to be sent 18725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param timeout 18735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Timeout in milliseconds for waiting reply packet 18745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ReplyPacket 18755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws InterruptedException 18765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws IOException 18775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws TimeoutException 18785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 18795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket performCommand(CommandPacket command, long timeout) 18805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throws IOException, InterruptedException, TimeoutException { 18815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return packetDispatcher.performCommand(command, timeout); 18835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 18845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 18855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 18865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sends CommandPacket to debuggee VM without waiting for the reply. This 18875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * method is intended for special cases when there is need to divide 18885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * command's performing into two actions: command's sending and receiving 18895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * reply (e.g. for asynchronous JDWP commands' testing). After this method 18905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the 'receiveReply()' method must be used latter for receiving reply for 18915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * sent command. It is NOT recommended to use this method for usual cases - 18925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 'performCommand()' method must be used. 18935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 18945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param command 18955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Command packet to be sent 18965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return command ID of sent command 18975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws IOException 18985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if any connection error occurred 18995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public int sendCommand(CommandPacket command) throws IOException { 19015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return packetDispatcher.sendCommand(command); 19025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 19055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for reply for command which was sent before by 'sendCommand()' 19065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * method. Default timeout is used as time limit for waiting. This method 19075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (jointly with 'sendCommand()') is intended for special cases when there 19085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is need to divide command's performing into two actions: command's 19095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * sending and receiving reply (e.g. for asynchronous JDWP commands' 19105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * testing). It is NOT recommended to use 'sendCommand()- receiveReply()' 19115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * pair for usual cases - 'performCommand()' method must be used. 19125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 19135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param commandId 19145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Command ID of sent before command, reply from which is 19155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * expected to be received 19165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ReplyPacket 19175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws IOException 19185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if any connection error occurred 19195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws InterruptedException 19205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if reply packet's waiting was interrupted 19215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws TimeoutException 19225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if timeout exceeded 19235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket receiveReply(int commandId) throws InterruptedException, 19255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes IOException, TimeoutException { 19265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return packetDispatcher.receiveReply(commandId, config.getTimeout()); 19275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 19305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for reply for command which was sent before by 'sendCommand()' 19315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * method. Specified timeout is used as time limit for waiting. This method 19325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (jointly with 'sendCommand()') is intended for special cases when there 19335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * is need to divide command's performing into two actions: command's 19345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * sending and receiving reply (e.g. for asynchronous JDWP commands' 19355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * testing). It is NOT recommended to use 'sendCommand()- receiveReply()' 19365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * pair for usual cases - 'performCommand()' method must be used. 19375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 19385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param commandId 19395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Command ID of sent before command, reply from which is 19405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * expected to be received 19415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param timeout 19425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Specified timeout in milliseconds to wait for reply 19435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received ReplyPacket 19445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws IOException 19455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if any connection error occurred 19465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws InterruptedException 19475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if reply packet's waiting was interrupted 19485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws TimeoutException 19495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * if timeout exceeded 19505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public ReplyPacket receiveReply(int commandId, long timeout) 19525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throws InterruptedException, IOException, TimeoutException { 19535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return packetDispatcher.receiveReply(commandId, timeout); 19545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 19575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for EventPacket using default timeout. All thrown exceptions are 19585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * wrapped into TestErrorException. 19595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 19605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received EventPacket 19615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public EventPacket receiveEvent() throws TestErrorException { 19635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 19645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return receiveEvent(config.getTimeout()); 19655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (IOException e) { 19665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException(e); 19675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (InterruptedException e) { 19685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException(e); 19695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 19735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for EventPacket using specified timeout. 19745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 19755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param timeout 19765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Timeout in milliseconds to wait for event 19775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received EventPacket 19785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws IOException 19795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws InterruptedException 19805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @throws TimeoutException 19815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public EventPacket receiveEvent(long timeout) throws IOException, 19835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes InterruptedException, TimeoutException { 19845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return packetDispatcher.receiveEvent(timeout); 19865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 19875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 19885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 19895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Waits for expected event kind using default timeout. Throws 19905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * TestErrorException if received event is not of expected kind or not a 19915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * single event in the received event set. 19925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 19935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param eventKind 19945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Type of expected event - 19955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @see JDWPConstants.EventKind 19965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return received EventPacket 19975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 19985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public EventPacket receiveCertainEvent(byte eventKind) 19995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throws TestErrorException { 20005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes EventPacket eventPacket = receiveEvent(); 20025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(eventPacket); 20035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (parsedEvents.length == 1 20055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes && parsedEvents[0].getEventKind() == eventKind) 20065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return eventPacket; 20075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes switch (parsedEvents.length) { 20095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case (0): 20105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 20115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Unexpected event received: zero length"); 20125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes case (1): 20135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException("Unexpected event received: " 20145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes + parsedEvents[0].getEventKind()); 20155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes default: 20165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 20175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Unexpected event received: Event was grouped in a composite event"); 20185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 20225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns JDWP connection channel used by this VmMirror. 20235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 20245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return connection channel 20255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 20265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public TransportWrapper getConnection() { 20275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return connection; 20285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 20315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets established connection channel to be used with this VmMirror and 20325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * starts reading packets. 20335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 20345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param connection 20355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * connection channel to be set 20365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 20375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void setConnection(TransportWrapper connection) { 20385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes this.connection = connection; 20395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packetDispatcher = new PacketDispatcher(connection, config, logWriter); 20405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 20435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Closes connection channel used with this VmMirror and stops reading 20445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * packets. 20455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 20465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 20475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public void closeConnection() throws IOException { 20485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (connection != null && connection.isOpen()) 20495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes connection.close(); 20505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // wait for packetDispatcher is closed 20525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (packetDispatcher != null) { 20535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes try { 20545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes packetDispatcher.join(); 20555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } catch (InterruptedException e) { 20565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // do nothing but print a stack trace 20575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes e.printStackTrace(); 20585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 20635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the count of frames on this thread's stack 20645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 20655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 20665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The thread object ID. 20675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The count of frames on this thread's stack 20685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 20695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final int getFrameCount(long threadID) { 20705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 20715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 20725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.FrameCountCommand); 20735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 20745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 20755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsInt(); 20765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 20795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns a list containing all frames of a certain thread 20805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 20815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 20825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ID of the thread 20835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return A list of frames 20845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 20855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final List getAllThreadFrames(long threadID) { 20865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (!isThreadSuspended(threadID)) { 20875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return new ArrayList(0); 20885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = getThreadFrames(threadID, 0, -1); 20915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int framesCount = reply.getNextValueAsInt(); 20925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (framesCount == 0) { 20935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return new ArrayList(0); 20945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 20955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 20965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ArrayList<Frame> frames = new ArrayList<Frame>(framesCount); 20975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < framesCount; i++) { 20985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Frame frame = new Frame(); 20995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes frame.setThreadID(threadID); 21005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes frame.setID(reply.getNextValueAsFrameID()); 21015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes frame.setLocation(reply.getNextValueAsLocation()); 21025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes frames.add(frame); 21035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return frames; 21065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 21095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns a set of frames of a certain suspended thread 21105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 21115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 21125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * ID of the thread whose frames to obtain 21135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param startIndex 21145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The index of the first frame to retrieve. 21155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param length 21165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The count of frames to retrieve (-1 means all remaining). 21175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 21185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 21195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final ReplyPacket getThreadFrames(long threadID, int startIndex, 21205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int length) { 21215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 21225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 21235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.FramesCommand); 21245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 21255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(startIndex); // start frame's index 21265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(length); // get all remaining frames; 21275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(command)); 21285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 21315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns variable information for the method 21325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 21335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 21345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class ID 21355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 21365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The method ID 21375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return A list containing all variables (arguments and locals) declared 21385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * within the method. 21395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 21405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final List getVariableTable(long classID, long methodID) { 21415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 21425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.MethodCommandSet.CommandSetID, 21435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.MethodCommandSet.VariableTableCommand); 21445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(classID); 21455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsMethodID(methodID); 21465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // ReplyPacket reply = 21475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // debuggeeWrapper.vmMirror.checkReply(debuggeeWrapper.vmMirror.performCommand(command)); 21485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = performCommand(command); 21495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() == JDWPConstants.Error.ABSENT_INFORMATION 21505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes || reply.getErrorCode() == JDWPConstants.Error.NATIVE_METHOD) { 21515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 21525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(reply); 21555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); // argCnt, is not used 21575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int slots = reply.getNextValueAsInt(); 21585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (slots == 0) { 21595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 21605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ArrayList<Variable> vars = new ArrayList<Variable>(slots); 21635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < slots; i++) { 21645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Variable var = new Frame().new Variable(); 21655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes var.setCodeIndex(reply.getNextValueAsLong()); 21665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes var.setName(reply.getNextValueAsString()); 21675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes var.setSignature(reply.getNextValueAsString()); 21685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes var.setLength(reply.getNextValueAsInt()); 21695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes var.setSlot(reply.getNextValueAsInt()); 21705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes vars.add(var); 21715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return vars; 21745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 21775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns values of local variables in a given frame 21785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 21795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param frame 21805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Frame whose variables to get 21815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return An array of Value objects 21825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 21835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final Value[] getFrameValues(Frame frame) { 21845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 21855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.CommandSetID, 21865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.GetValuesCommand); 21875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(frame.getThreadID()); 21885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFrameID(frame.getID()); 21895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int slots = frame.getVars().size(); 21905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(slots); 21915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Iterator it = frame.getVars().iterator(); 21925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes while (it.hasNext()) { 21935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Frame.Variable var = (Frame.Variable) it.next(); 21945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(var.getSlot()); 21955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsByte(var.getTag()); 21965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 21975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 21985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 21995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); // number of values , is not used 22005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values = new Value[slots]; 22015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < slots; i++) { 22025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes values[i] = reply.getNextValueAsValue(); 22035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return values; 22065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 22095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the immediate superclass of a class 22105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 22115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 22125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class ID whose superclass ID is to get 22135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The superclass ID (null if the class ID for java.lang.Object is 22145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * specified). 22155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 22165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getSuperclassId(long classID) { 22175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 22185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 22195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.SuperclassCommand); 22205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsClassID(classID); 22215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 22225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsClassID(); 22235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 22265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the runtime type of the object 22275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 22285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 22295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The object ID 22305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The runtime reference type. 22315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 22325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getReferenceType(long objectID) { 22335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 22345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 22355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.ReferenceTypeCommand); 22365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsObjectID(objectID); 22375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 22385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsByte(); 22395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsLong(); 22405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 22435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the class object corresponding to this type 22445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 22455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param refType 22465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The reference type ID. 22475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The class object. 22485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 22495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getClassObjectId(long refType) { 22505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 22515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 22525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.ClassObjectCommand); 22535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(refType); 22545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 22555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsObjectID(); 22565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 22595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns line number information for the method, if present. 22605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 22615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param refType 22625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class ID 22635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 22645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The method ID 22655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command. 22665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 22675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final ReplyPacket getLineTable(long refType, long methodID) { 22685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 22695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.MethodCommandSet.CommandSetID, 22705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.MethodCommandSet.LineTableCommand); 22715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(refType); 22725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsMethodID(methodID); 22735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // ReplyPacket reply = 22745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // debuggeeWrapper.vmMirror.checkReply(debuggeeWrapper.vmMirror.performCommand(command)); 22755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // it is impossible to obtain line table information from native 22765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // methods, so reply checking is not performed 22775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = performCommand(command); 22785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() != JDWPConstants.Error.NONE) { 22795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() == JDWPConstants.Error.NATIVE_METHOD) { 22805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply; 22815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(reply); 22855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 22865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 22875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 22885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the value of one or more instance fields. 22895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 22905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 22915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The object ID 22925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldIDs 22935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * IDs of fields to get 22945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return An array of Value objects representing each field's value 22955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 22965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final Value[] getObjectReferenceValues(long objectID, long[] fieldIDs) { 22975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int fieldsCount = fieldIDs.length; 22985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (fieldsCount == 0) { 22995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 23005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 23035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 23045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.GetValuesCommand); 23055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(objectID); 23065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(fieldsCount); 23075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldsCount; i++) { 23085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFieldID(fieldIDs[i]); 23095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 23125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); // fields returned, is not used 23135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values = new Value[fieldsCount]; 23145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldsCount; i++) { 23155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes values[i] = reply.getNextValueAsValue(); 23165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return values; 23195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 23225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the value of one or more static fields of the reference type 23235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 23245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param refTypeID 23255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The reference type ID. 23265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldIDs 23275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * IDs of fields to get 23285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return An array of Value objects representing each field's value 23295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 23305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final Value[] getReferenceTypeValues(long refTypeID, long[] fieldIDs) { 23315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int fieldsCount = fieldIDs.length; 23325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (fieldsCount == 0) { 23335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 23345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 23375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 23385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand); 23395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(refTypeID); 23405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(fieldsCount); 23415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldsCount; i++) { 23425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFieldID(fieldIDs[i]); 23435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 23465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); // fields returned, is not used 23475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values = new Value[fieldsCount]; 23485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldsCount; i++) { 23495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes values[i] = reply.getNextValueAsValue(); 23505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return values; 23535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 23565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the value of the 'this' reference for this frame 23575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 23585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 23595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The frame's thread ID 23605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param frameID 23615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The frame ID. 23625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The 'this' object ID for this frame. 23635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 23645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getThisObject(long threadID, long frameID) { 23655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 23665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.CommandSetID, 23675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.ThisObjectCommand); 23685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 23695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFrameID(frameID); 23705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 23715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes TaggedObject taggedObject = reply.getNextValueAsTaggedObject(); 23725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return taggedObject.objectID; 23735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 23765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns information for each field in a reference type including 23775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * inherited fields 23785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 23795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 23805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The reference type ID 23815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return A list of Field objects representing each field of the class 23825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 23835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final List getAllFields(long classID) { 23845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ArrayList<Field> fields = new ArrayList<Field>(0); 23855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long superID = getSuperclassId(classID); 23875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (superID != 0) { 23885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes List superClassFields = getAllFields(superID); 23895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < superClassFields.size(); i++) { 23905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fields.add((Field) superClassFields.toArray()[i]); 23915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 23935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 23945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = getFieldsInClass(classID); 23955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int fieldsCount = reply.getNextValueAsInt(); 23965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldsCount; i++) { 23975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Field field = new Field(reply.getNextValueAsFieldID(), classID, 23985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsString(), reply.getNextValueAsString(), 23995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt()); 24005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes fields.add(field); 24015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return fields; 24045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 24075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the reference type reflected by this class object 24085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 24095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classObjectID 24105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class object ID. 24115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 24125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 24135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final ReplyPacket getReflectedType(long classObjectID) { 24145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 24155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassObjectReferenceCommandSet.CommandSetID, 24165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassObjectReferenceCommandSet.ReflectedTypeCommand); 24175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsClassObjectID(classObjectID); 24185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(command)); 24195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 24225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the JNI signature of a reference type. JNI signature formats are 24235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * described in the Java Native Interface Specification 24245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 24255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param refTypeID 24265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The reference type ID. 24275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The JNI signature for the reference type. 24285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 24295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final String getReferenceTypeSignature(long refTypeID) { 24305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 24315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 24325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.SignatureCommand); 24335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(refTypeID); 24345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 24355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsString(); 24365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 24395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the thread group that contains a given thread 24405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 24415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 24425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The thread object ID. 24435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The thread group ID of this thread. 24445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 24455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getThreadGroupID(long threadID) { 24465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 24475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 24485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.ThreadGroupCommand); 24495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 24505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 24515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsThreadGroupID(); 24525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 24555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Checks whether a given thread is suspended or not 24565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 24575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 24585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The thread object ID. 24595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return True if a given thread is suspended, false otherwise. 24605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 24615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final boolean isThreadSuspended(long threadID) { 24625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 24635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.CommandSetID, 24645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ThreadReferenceCommandSet.StatusCommand); 24655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 24665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 24675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); // the thread's status; is not used 24685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsInt() == JDWPConstants.SuspendStatus.SUSPEND_STATUS_SUSPENDED; 24695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 24705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 24715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 24725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns JNI signature of method. 24735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 24745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 24755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The reference type ID. 24765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 24775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The method ID. 24785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return JNI signature of method. 24795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 24805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final String getMethodSignature(long classID, long methodID) { 24815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 24825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.CommandSetID, 24835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ReferenceTypeCommandSet.MethodsCommand); 24845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsReferenceTypeID(classID); 24855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 24865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int methods = reply.getNextValueAsInt(); 24875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String value = null; 24885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < methods; i++) { 24895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long mID = reply.getNextValueAsMethodID(); 24905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsString(); // name of the method; is not used 24915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String methodSign = reply.getNextValueAsString(); 24925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsInt(); 24935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (mID == methodID) { 24945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes value = methodSign; 24955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes value = value.replaceAll("/", "."); 24965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int lastRoundBracketIndex = value.lastIndexOf(")"); 24975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes value = value.substring(0, lastRoundBracketIndex + 1); 24985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 24995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return value; 25035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 25065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns the characters contained in the string 25075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 25085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 25095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The String object ID. 25105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return A string value. 25115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 25125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final String getStringValue(long objectID) { 25135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 25145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StringReferenceCommandSet.CommandSetID, 25155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StringReferenceCommandSet.ValueCommand); 25165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsObjectID(objectID); 25175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 25185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsString(); 25195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 25225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns a range of array components 25235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 25245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 25255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The array object ID. 25265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The retrieved values. 25275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 25285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public Value[] getArrayValues(long objectID) { 25295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 25305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.CommandSetID, 25315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.LengthCommand); 25325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsArrayID(objectID); 25335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 25345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int length = reply.getNextValueAsInt(); 25355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (length == 0) { 25375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 25385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command = new CommandPacket( 25415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.CommandSetID, 25425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.GetValuesCommand); 25435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsArrayID(objectID); 25445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(0); 25455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(length); 25465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply = checkReply(performCommand(command)); 25475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ArrayRegion arrayRegion = reply.getNextValueAsArrayRegion(); 25485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values = new Value[length]; 25505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < length; i++) { 25515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes values[i] = arrayRegion.getValue(i); 25525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return values; 25555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 25585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns a source line number according to a corresponding line code index 25595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * in a method's line table. 25605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 25615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 25625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class object ID. 25635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 25645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The method ID. 25655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param codeIndex 25665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The line code index. 25675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return An integer line number. 25685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 25695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final int getLineNumber(long classID, long methodID, long codeIndex) { 25705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int lineNumber = -1; 25715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = getLineTable(classID, methodID); 25725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() != JDWPConstants.Error.NONE) { 25735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return lineNumber; 25745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsLong(); // start line index, is not used 25775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsLong(); // end line index, is not used 25785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int lines = reply.getNextValueAsInt(); 25795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < lines; i++) { 25805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long lineCodeIndex = reply.getNextValueAsLong(); 25815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes lineNumber = reply.getNextValueAsInt(); 25825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (lineCodeIndex == codeIndex) { 25835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 25845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (lineCodeIndex > codeIndex) { 25875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes --lineNumber; 25885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes break; 25895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return lineNumber; 25935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 25945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 25955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 25965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns a line code index according to a corresponding line number in a 25975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * method's line table. 25985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 25995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 26005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class object ID. 26015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodID 26025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The method ID. 26035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param lineNumber 26045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * A source line number. 26055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return An integer representing the line code index. 26065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 26075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long getLineCodeIndex(long classID, long methodID, 26085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int lineNumber) { 26095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = getLineTable(classID, methodID); 26105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (reply.getErrorCode() != JDWPConstants.Error.NONE) { 26115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return -1L; 26125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsLong(); // start line index, is not used 26155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes reply.getNextValueAsLong(); // end line index, is not used 26165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes int lines = reply.getNextValueAsInt(); 26175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < lines; i++) { 26185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long lineCodeIndex = reply.getNextValueAsLong(); 26195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (lineNumber == reply.getNextValueAsInt()) { 26205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return lineCodeIndex; 26215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return -1L; 26255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 26285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Returns all variables which are visible within the given frame. 26295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 26305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param frame 26315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The frame whose visible local variables to retrieve. 26325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return A list of Variable objects representing each visible local 26335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * variable within the given frame. 26345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 26355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final List getLocalVars(Frame frame) { 26365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes List vars = getVariableTable(frame.getLocation().classID, frame 26375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes .getLocation().methodID); 26385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (vars == null) { 26395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return null; 26405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // All variables that are not visible from within current frame must be 26435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes // removed from the list 26445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long frameCodeIndex = frame.getLocation().index; 26455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < vars.size(); i++) { 26465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Variable var = (Variable) vars.toArray()[i]; 26475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long varCodeIndex = var.getCodeIndex(); 26485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (varCodeIndex > frameCodeIndex 26495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes || (frameCodeIndex >= varCodeIndex + var.getLength())) { 26505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes vars.remove(i); 26515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes --i; 26525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes continue; 26535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return vars; 26575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 26605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets the value of one or more local variables 26615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 26625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param frame 26635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The frame ID. 26645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param vars 26655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of Variable objects whose values to set 26665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param values 26675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of Value objects to set 26685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 26695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final void setLocalVars(Frame frame, Variable[] vars, Value[] values) { 26705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (vars.length != values.length) { 26715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 26725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Number of variables doesn't correspond to number of their values"); 26735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 26765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.CommandSetID, 26775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.SetValuesCommand); 26785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(frame.getThreadID()); 26795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFrameID(frame.getID()); 26805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(vars.length); 26815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < vars.length; i++) { 26825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(vars[i].getSlot()); 26835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsValue(values[i]); 26845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(performCommand(command)); 26875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 26885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 26895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 26905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets the value of one or more instance fields 26915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 26925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 26935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The object ID. 26945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldIDs 26955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of fields IDs 26965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param values 26975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of Value objects representing each value to set 26985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 26995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final void setInstanceFieldsValues(long objectID, long[] fieldIDs, 27005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values) { 27015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (fieldIDs.length != values.length) { 27025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 27035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Number of fields doesn't correspond to number of their values"); 27045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 27075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 27085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.SetValuesCommand); 27095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsObjectID(objectID); 27105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(fieldIDs.length); 27115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldIDs.length; i++) { 27125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFieldID(fieldIDs[i]); 27135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsUntaggedValue(values[i]); 27145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(performCommand(command)); 27175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 27205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets a range of array components. The specified range must be within the 27215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * bounds of the array. 27225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 27235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param arrayID 27245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The array object ID. 27255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param firstIndex 27265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The first index to set. 27275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param values 27285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of Value objects representing each value to set. 27295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 27305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final void setArrayValues(long arrayID, int firstIndex, 27315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values) { 27325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 27335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.CommandSetID, 27345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ArrayReferenceCommandSet.SetValuesCommand); 27355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsArrayID(arrayID); 27365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(firstIndex); 27375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(values.length); 27385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < values.length; i++) { 27395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsUntaggedValue(values[i]); 27405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(performCommand(command)); 27435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 27465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Sets the value of one or more static fields 27475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 27485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 27495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class type ID. 27505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param fieldIDs 27515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of fields IDs 27525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param values 27535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * An array of Value objects representing each value to set 27545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 27555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final void setStaticFieldsValues(long classID, long[] fieldIDs, 27565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes Value[] values) { 27575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes if (fieldIDs.length != values.length) { 27585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes throw new TestErrorException( 27595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes "Number of fields doesn't correspond to number of their values"); 27605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 27635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 27645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.SetValuesCommand); 27655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsClassID(classID); 27665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(fieldIDs.length); 27675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < fieldIDs.length; i++) { 27685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFieldID(fieldIDs[i]); 27695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsUntaggedValue(values[i]); 27705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(performCommand(command)); 27735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 27765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Creates java String in target VM with the given value. 27775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 27785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param value 27795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The value of the string. 27805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return The string id. 27815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 27825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final long createString(String value) { 27835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 27845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CommandSetID, 27855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.VirtualMachineCommandSet.CreateStringCommand); 27865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsString(value); 27875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes ReplyPacket reply = checkReply(performCommand(command)); 27885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return reply.getNextValueAsStringID(); 27895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 27905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 27915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 27925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Processes JDWP PopFrames command from StackFrame command set. 27935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 27945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param frame 27955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The instance of Frame. 27965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 27975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final void popFrame(Frame frame) { 27985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 27995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.CommandSetID, 28005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.StackFrameCommandSet.PopFramesCommand); 28015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(frame.getThreadID()); 28025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsFrameID(frame.getID()); 28035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes checkReply(performCommand(command)); 28045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 28055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 28065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 28075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Invokes a member method of the given object. 28085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 28095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param objectID 28105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The object ID. 28115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 28125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The thread ID. 28135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodName 28145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The name of method for the invocation. 28155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param args 28165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The arguments for the invocation. 28175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param options 28185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The invocation options. 28195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 28205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 28215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final ReplyPacket invokeInstanceMethod(long objectID, long threadID, 28225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String methodName, Value[] args, int options) { 28235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long classID = getReferenceType(objectID); 28245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = getMethodID(classID, methodName); 28255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 28265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.CommandSetID, 28275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ObjectReferenceCommandSet.InvokeMethodCommand); 28285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsObjectID(objectID); 28295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 28305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsClassID(classID); 28315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsMethodID(methodID); 28325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(args.length); 28335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < args.length; i++) { 28345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsValue(args[i]); 28355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 28365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(options); 28375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 28385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(command)); 28395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 28405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 28415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes /** 28425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Invokes a static method of the given class. 28435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * 28445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param classID 28455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The class type ID. 28465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param threadID 28475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The thread ID. 28485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param methodName 28495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The name of method for the invocation. 28505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param args 28515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The arguments for the invocation. 28525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @param options 28535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The invocation options. 28545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @return ReplyPacket for corresponding command 28555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */ 28565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes public final ReplyPacket invokeStaticMethod(long classID, long threadID, 28575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes String methodName, Value[] args, int options) { 28585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes long methodID = getMethodID(classID, methodName); 28595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes CommandPacket command = new CommandPacket( 28605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.CommandSetID, 28615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand); 28625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsClassID(classID); 28635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsThreadID(threadID); 28645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsMethodID(methodID); 28655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(args.length); 28665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes for (int i = 0; i < args.length; i++) { 28675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsValue(args[i]); 28685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 28695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes command.setNextValueAsInt(options); 28705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes 28715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes return checkReply(performCommand(command)); 28725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes } 28735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes} 2874