You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by mo...@apache.org on 2009/09/18 16:02:26 UTC
svn commit: r816691 - in
/incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi:
JDIController.java KatoReader.java
Author: monteith
Date: Fri Sep 18 16:02:26 2009
New Revision: 816691
URL: http://svn.apache.org/viewvc?rev=816691&view=rev
Log:
Commit changes from KATO-11 submitted by Paul Sobek.
Modified:
incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/JDIController.java
incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/KatoReader.java
Modified: incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/JDIController.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/JDIController.java?rev=816691&r1=816690&r2=816691&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/JDIController.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/JDIController.java Fri Sep 18 16:02:26 2009
@@ -12,8 +12,16 @@
* limitations under the License.
******************************************************************************/
package org.apache.kato.tools.jdi;
-public class JDIController {
+import java.util.concurrent.CountDownLatch;
+public class JDIController {
+
+ private static CountDownLatch readyToGo;
+
+ public static void jdbLaunch(String args[], CountDownLatch readyToGo){
+ JDIController.readyToGo = readyToGo;
+ JDIController.main(args);
+ }
public static void main(String args[]){
long baselineMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
@@ -94,6 +102,7 @@
JDWPServer svr = null;
try{
svr = new JDWPServer(JDILogger.logger, port);
+ if (readyToGo!=null)svr.setTerminateLastClient(true);
}catch(Exception exxy){
System.err.println("Unrecoverable error:"); //$NON-NLS-1$
exxy.printStackTrace();
@@ -154,6 +163,10 @@
memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
chsr.commit();
+ // Notify jdb connector if it is listening...
+ if (readyToGo != null){
+ readyToGo.countDown();
+ }
logr.log(JDILogger.LEVEL_VERBOSE, "Goodbye! (Uptime: " + (System.currentTimeMillis() - time) + "ms) (" + (memory - baselineMemory) + "B used)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
try{Thread.sleep(5000);}catch(Exception exxy){}
}
Modified: incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/KatoReader.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/KatoReader.java?rev=816691&r1=816690&r2=816691&view=diff
==============================================================================
--- incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/KatoReader.java (original)
+++ incubator/kato/trunk/org.apache.kato/kato.jdi/src/main/java/org/apache/kato/tools/jdi/KatoReader.java Fri Sep 18 16:02:26 2009
@@ -100,6 +100,7 @@
private JDILogger logr;
public static final int ERROR_NONE = 0;
public static final int ERROR_INVALID_OBJECT = 20;
+ public static final int ERROR_INVALID_CLASS = 21;
public static final int ERROR_INVALID_THREAD = 10;
public static final int ERROR_INVALID_SLOT = 35;
public static final int ERROR_NOT_IMPLEMENTED = 99;
@@ -376,6 +377,8 @@
return eventRequest(cpckt);
case COMMANDSET_STACK_FRAME:
return stackFrame(cpckt);
+ case COMMANDSET_CLASS_LOADER_REFERENCE:
+ return classLoaderRef(cpckt);
// Added for jdb
case COMMANDSET_THREAD_GROUP_REFERENCE:
return threadGroupReference(cpckt);
@@ -1862,27 +1865,27 @@
int highest = findHighestLineRef(refType, methodID) + 1;
logr.log(JDILogger.LEVEL_VERYVERBOSE, " (L)" + jClass.getName() + "." + jMethod.getName() + ":" + lowest + "<" + line + ">" + highest); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- //Code index start
- addLongToVector(vctr, lowest);
- //Code index end
- addLongToVector(vctr, highest);
- //Number of lines
- addIntToVector(vctr, highest - lowest);
- for(int i = lowest; i <= highest; i++){
- addLongToVector(vctr, i);
- addIntToVector(vctr, i);
- }
-
// //Code index start
-// addLongToVector(vctr, 0);
+// addLongToVector(vctr, lowest);
// //Code index end
-// addLongToVector(vctr, 99999999); // TODO go through local variable tables looking for highest reference?
+// addLongToVector(vctr, highest);
// //Number of lines
-// addIntToVector(vctr, 1);
-// //for(int i = lowest; i <= highest; i++){
-// addLongToVector(vctr, jLocation.getAddress().getAddress()-1);
-// addIntToVector(vctr, jLocation.getLineNumber());
-// //}
+// addIntToVector(vctr, highest - lowest);
+// for(int i = lowest; i <= highest; i++){
+// addLongToVector(vctr, i);
+// addIntToVector(vctr, i);
+// }
+
+ //Code index start
+ addLongToVector(vctr, 0);
+ //Code index end
+ addLongToVector(vctr, 99999999); // TODO go through local variable tables looking for highest reference?
+ //Number of lines
+ addIntToVector(vctr, 1);
+ //for(int i = lowest; i <= highest; i++){
+ addLongToVector(vctr, jLocation.getAddress().getAddress()-1);
+ addIntToVector(vctr, jLocation.getLineNumber());
+ //}
}else{
@@ -1964,6 +1967,7 @@
for (Object nextVar : vars) {
if (nextVar instanceof CorruptData) {
+ logr.log(JDILogger.LEVEL_VERYVERBOSE, "Corrupt local variable data");
continue;
}
@@ -2376,6 +2380,7 @@
if (objectMap.containsKey(object)){
logr.log(JDILogger.LEVEL_VERYVERBOSE, " O:" + fieldID); //$NON-NLS-1$
if (!getFieldFromObject(vctr, object, fieldID)){
+ logr.log(JDILogger.LEVEL_VERYVERBOSE, " O:" + fieldID+" Invalid Object/Field"); //$NON-NLS-1$
ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_OBJECT);
return rpckt;
@@ -2384,6 +2389,7 @@
}else{
logr.log(JDILogger.LEVEL_VERYVERBOSE, " C:" + fieldID); //$NON-NLS-1$
if (!getFieldFromClass(vctr, object, fieldID)){
+ logr.log(JDILogger.LEVEL_VERYVERBOSE, " O:" + fieldID+" Invalid Object/Field"); //$NON-NLS-1$
ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_OBJECT);
return rpckt;
}
@@ -3211,6 +3217,7 @@
logr.log(JDILogger.LEVEL_VERYVERBOSE, "Set("+eventKind+","+suspendPolicy+","+modifiers+", ...)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
for (int i = 0; i < modifiers; i++){
int modKind = inData[6 + (6*i)];
+ logr.log(JDILogger.LEVEL_VERYVERBOSE, "Set(Modkind"+modKind+")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
if (modKind == 5){
String classPattern = getStringFromBytes(inData, 6 + (6*i) + 1);
logr.log(JDILogger.LEVEL_VERYVERBOSE, "ClassMatch(\"" + classPattern + "\")"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -3220,7 +3227,14 @@
}
- ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
+ ReplyPacket rpckt;
+ if (eventKind == 8){
+ rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_INVALID_CLASS);
+ return rpckt;
+ }else{
+
+ }
+ rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
Vector<Byte> vctr = new Vector<Byte>();
addIntToVector(vctr, LAST_ID++);
rpckt.setData(vectorToByte(vctr));
@@ -3315,7 +3329,7 @@
addCharToVector(vctr, charVal);
break;
case TAG_OBJECT:
- long objectAddress = -1L;
+ long objectAddress = 0L;
byte typeTag = (byte)TAG_OBJECT;
if (value instanceof JavaObject) {
@@ -3466,7 +3480,7 @@
} else {
Object value = jFrame.getVariable(0);
long objectAddress = 0;
- if (value instanceof JavaObject) {
+ if (value != null && value instanceof JavaObject) {
JavaObject obj = (JavaObject) value;
objectAddress = obj.getID().getAddress();
}
@@ -3494,6 +3508,61 @@
return rpckt;
}
+
+ private byte getRefTypeTag(JavaClass jcl){
+ byte refTypeTag = 1;
+ try {
+ if (jcl.isArray()){
+ refTypeTag = 3;
+ }else if(isInterface(jcl.getID().getAddress())){
+ refTypeTag = 2;
+ }
+ } catch (CorruptDataException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return refTypeTag;
+ }
+
+ private ReplyPacket classLoaderRef(CommandPacket cpckt) throws Exception{
+ if (cpckt.getCommand() == 1){
+ byte []inData = cpckt.getByteData();
+ long classLoaderID = createLongFromBytes(inData, 0, 8);
+ logr.log(JDILogger.LEVEL_VERBOSE, "VisibleClasses(" + classLoaderID + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ int count = 0;
+ Vector<Byte> vctr = new Vector<Byte>();
+ Vector<JavaClassLoader> jcls = new Vector<JavaClassLoader>();
+ for (JavaClass jc: classes.values()){
+ JavaObject obj;
+ if ((obj = jc.getClassLoader().getObject()) != null){
+ if (obj.getID().getAddress() == classLoaderID){
+ jcls.add(jc.getClassLoader());
+ jc = jc.getClassLoader().getObject().getJavaClass();
+ while (jc.getClassLoader()!= null){
+ jcls.add(jc.getClassLoader());
+ jc = jc.getClassLoader().getObject().getJavaClass();
+ }
+ break;
+ }
+ }
+ }
+
+ for (JavaClass jc: classes.values()){
+ for (JavaClassLoader jcl : jcls){
+ if (jc.getClassLoader() == jcl){
+ vctr.add(getRefTypeTag(jc));
+ addLongToVector(vctr, jc.getID().getAddress());
+ count++;
+ }
+ }
+ }
+ addIntToVectorFront(vctr, count);
+ ReplyPacket rpckt = new ReplyPacket(cpckt.getSequence(), FLAG_REPLY_PACKET, ERROR_NONE);
+ rpckt.setData(vectorToByte(vctr));
+ return rpckt;
+ }
+ return null;
+ }
private ReplyPacket threadGroupReference(CommandPacket cpckt) throws Exception{