JVMThreadNode::~JVMThreadNode() { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); if (link != NULL) // when switching debugger type, it won't be a JVMLink { link->ThreadDeleted(this); } }
void JVMThreadNode::FindParent ( const JUInt64 id ) { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); JVMThreadNode* parent; if (!link->FindThread(id, &parent)) { parent = new JVMThreadNode(kGroupType, id); assert( parent != NULL ); } parent->AppendThread(this); }
void JVMGetThreadParent::HandleSuccess ( const JString& origData ) { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); const JVMSocket::MessageReady* msg; if (!link->GetLatestMessageFromJVM(&msg)) { return; } if (itsNode != NULL && !itsCheckOnlyFlag) { const unsigned char* data = msg->GetData(); const JUInt64 id = JVMSocket::Unpack(link->GetObjectIDSize(), data); itsNode->FindParent(id); } }
JBoolean JVMStackFrameNode::UpdateNodeName() { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); JString c, m; if (link->GetClassName(itsClassID, &c) && link->GetMethodName(itsClassID, itsMethodID, &m)) { c += "."; c += m; SetName(c); return kJTrue; } if (GetName().IsEmpty()) { c = JString(itsClassID, JString::kBase10) + ":" + JString(itsMethodID, JString::kBase10) + ":" + JString(itsCodeOffset, JString::kBase16); SetName(c); } return kJFalse; }
void JVMGetIDSizes::HandleSuccess ( const JString& origData ) { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); const JVMSocket::MessageReady* msg; if (!link->GetLatestMessageFromJVM(&msg)) { return; } const unsigned char* data = msg->GetData(); assert( msg->GetDataLength() == 20 ); const JSize fieldIDSize = JVMSocket::Unpack4(data); const JSize methodIDSize = JVMSocket::Unpack4(data+4); const JSize objectIDSize = JVMSocket::Unpack4(data+8); const JSize refTypeIDSize = JVMSocket::Unpack4(data+12); const JSize frameIDSize = JVMSocket::Unpack4(data+16); link->SetIDSizes(fieldIDSize, methodIDSize, objectIDSize, refTypeIDSize, frameIDSize); }
void JVMGetThreadParent::Starting() { CMCommand::Starting(); if (itsNode != NULL) { JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink()); const JSize length = link->GetObjectIDSize(); unsigned char* data = (unsigned char*) calloc(length, 1); assert( data != NULL ); JVMSocket::Pack(length, itsNode->GetID(), data); const JBoolean isGroup = JI2B(itsNode->GetType() == JVMThreadNode::kGroupType); link->Send(this, isGroup ? JVMLink::kThreadGroupReferenceCmdSet : JVMLink::kThreadReferenceCmdSet, isGroup ? JVMLink::kTGParentCmd : JVMLink::kTThreadGroupCmd, data, length); free(data); } }