Esempio n. 1
0
JVMThreadNode::~JVMThreadNode()
{
	JVMLink* link = dynamic_cast<JVMLink*>(CMGetLink());
	if (link != NULL)	// when switching debugger type, it won't be a JVMLink
		{
		link->ThreadDeleted(this);
		}
}
Esempio n. 2
0
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);
		}
}