Exemplo n.º 1
0
        /// <summary>
        /// http://java.sun.com/javase/6/docs/platform/jpda/jdwp/jdwp-protocol.html#JDWP_VirtualMachine
        /// </summary>
        /// <param name="packet"></param>
        private void CommandSetVirtualMachine(Packet packet)
        {
            switch (packet.Command)
            {
            case VirtualMachine.Version:
                packet.WriteString("IKVM Debugger");
                packet.WriteInt(1);
                packet.WriteInt(6);
                packet.WriteString("1.6.0");
                packet.WriteString("IKVM.NET");
                break;

            case VirtualMachine.ClassesBySignature:
                String             jniClassName = packet.ReadString();
                IList <TargetType> types        = target.FindTypes(jniClassName);
                packet.WriteInt(types.Count);     // count

                foreach (TargetType type in types)
                {
                    Console.Error.WriteLine("FindTypes:" + jniClassName + ":" + type.TypeId);
                    packet.WriteByte(TypeTag.CLASS);     //TODO can also a interface
                    packet.WriteObjectID(type.TypeId);
                    packet.WriteInt(ClassStatus.INITIALIZED);
                }

                break;

            case VirtualMachine.AllThreads:
                int[] ids = target.GetThreadIDs();
                packet.WriteInt(ids.Length);
                for (int i = 0; i < ids.Length; i++)
                {
                    packet.WriteObjectID(ids[i]);
                }
                break;

            case VirtualMachine.IDSizes:
                int size = 4;          //we use a size of 4, a value of 8 is also possible
                packet.WriteInt(size); // fieldID size in bytes
                packet.WriteInt(size); // methodID size in bytes
                packet.WriteInt(size); // objectID size in bytes
                packet.WriteInt(size); // referenceTypeID size in bytes
                packet.WriteInt(size); // frameID size in bytes
                break;

            case VirtualMachine.Suspend:
                target.Suspend();
                break;

            case VirtualMachine.Resume:
                target.Resume();
                break;

            case VirtualMachine.Exit:
                target.Exit(packet.ReadInt());
                break;

            case VirtualMachine.Capabilities:
                packet.WriteBool(false);     // Can the VM watch field modification, and therefore can it send the Modification Watchpoint Event?
                packet.WriteBool(false);     // Can the VM watch field access, and therefore can it send the Access Watchpoint Event?
                packet.WriteBool(false);     // Can the VM get the bytecodes of a given method?
                packet.WriteBool(false);     // Can the VM determine whether a field or method is synthetic? (that is, can the VM determine if the method or the field was invented by the compiler?)
                packet.WriteBool(false);     // Can the VM get the owned monitors infornation for a thread?
                packet.WriteBool(false);     // Can the VM get the current contended monitor of a thread?
                packet.WriteBool(false);     // Can the VM get the monitor information for a given object?
                break;

            case VirtualMachine.CapabilitiesNew:
                packet.WriteBool(false);     // Can the VM watch field modification, and therefore can it send the Modification Watchpoint Event?
                packet.WriteBool(false);     // Can the VM watch field access, and therefore can it send the Access Watchpoint Event?
                packet.WriteBool(false);     // Can the VM get the bytecodes of a given method?
                packet.WriteBool(false);     // Can the VM determine whether a field or method is synthetic? (that is, can the VM determine if the method or the field was invented by the compiler?)
                packet.WriteBool(false);     // Can the VM get the owned monitors infornation for a thread?
                packet.WriteBool(false);     // Can the VM get the current contended monitor of a thread?
                packet.WriteBool(false);     // Can the VM get the monitor information for a given object?
                packet.WriteBool(false);     // Can the VM redefine classes?
                packet.WriteBool(false);     // Can the VM add methods when redefining classes?
                packet.WriteBool(false);     // Can the VM redefine classesin arbitrary ways?
                packet.WriteBool(false);     // Can the VM pop stack frames?
                packet.WriteBool(false);     // Can the VM filter events by specific object?
                packet.WriteBool(false);     // Can the VM get the source debug extension?
                packet.WriteBool(false);     // Can the VM request VM death events?
                packet.WriteBool(false);     // Can the VM set a default stratum?
                packet.WriteBool(false);     // Can the VM return instances, counts of instances of classes and referring objects?
                packet.WriteBool(false);     // Can the VM request monitor events?
                packet.WriteBool(false);     // Can the VM get monitors with frame depth info?
                packet.WriteBool(false);     // Can the VM filter class prepare events by source name?
                packet.WriteBool(false);     // Can the VM return the constant pool information?
                packet.WriteBool(false);     // Can the VM force early return from a method?
                packet.WriteBool(false);     // reserved22
                packet.WriteBool(false);     // reserved23
                packet.WriteBool(false);     // reserved24
                packet.WriteBool(false);     // reserved25
                packet.WriteBool(false);     // reserved26
                packet.WriteBool(false);     // reserved27
                packet.WriteBool(false);     // reserved28
                packet.WriteBool(false);     // reserved29
                packet.WriteBool(false);     // reserved30
                packet.WriteBool(false);     // reserved31
                packet.WriteBool(false);     // reserved32
                break;

            default:
                NotImplementedPacket(packet);     // include a SendPacket
                break;
            }
        }