void ObjectReferenceImpl::print_value_from_address(Oop *p, jint field_offset, jbyte tag) { if (tag == JDWP_Tag_OBJECT || tag == JDWP_Tag_ARRAY) { Oop::Raw o = p->obj_field(field_offset); tag = JavaDebugger::get_jdwp_tag(&o); } tty->print("Tag: %c", tag); switch(tag) { case JDWP_Tag_DOUBLE: tty->print(" Data: %lf", p->double_field(field_offset)); break; case JDWP_Tag_LONG: tty->print(" Data: %ld", p->long_field(field_offset)); break; case JDWP_Tag_BYTE: tty->print(" Data: %c", p->byte_field(field_offset)); break; case JDWP_Tag_CHAR: tty->print(" Data: 0x%hx", p->char_field(field_offset)); break; case JDWP_Tag_INT: tty->print(" Data: %d", p->int_field(field_offset)); break; case JDWP_Tag_FLOAT: tty->print(" Data: %f", jvm_f2d(p->float_field(field_offset))); break; case JDWP_Tag_SHORT: tty->print(" Data: %hu", p->short_field(field_offset)); break; case JDWP_Tag_BOOLEAN: if (p->bool_field(field_offset) == true) { tty->print(" Data: True"); } else { tty->print(" Data: False"); } break; case JDWP_Tag_VOID: // happens with function return values // write nothing break; default: { UsingFastOops fast_oops; Oop::Fast o = p->obj_field(field_offset); tty->print(" Data: 0x%x", o.obj()); } break; } }
// Print this EntryActivation and all other EntryActivation's that follow it. void EntryActivation::print_list_on(Stream* st, int indent, int index) { #if USE_DEBUG_PRINTING int last_indent = st->indentation(); st->set_indentation(indent); st->indent(); st->print("[%d] ", index); Method m = method(); m.print_value_on(st); st->cr(); for (int i = 0; i < length(); i++) { st->indent(); st->print(" "); switch(tag_at(i)) { case float_tag: st->print("(float) %f", jvm_f2d(float_at(i))); break; case double_tag: st->print("(double) %d", double_at(i)); i++; break; case long_tag: st->print("(long) "); st->print(OsMisc_jlong_format_specifier(), long_at(i)); i++; break; case obj_tag: { st->print("(obj) "); Oop obj = obj_at(i); obj.print_value_on(st); } break; case int_tag: st->print("(int) %d", int_at(i)); break; default: SHOULD_NOT_REACH_HERE(); } st->cr(); } EntryActivation mynext = next(); if (mynext.not_null()) { mynext.print_list_on(st, indent, index+1); } st->set_indentation(last_indent); #endif }
void BytecodePrintClosure::push_float(jfloat value JVM_TRAPS) { JVM_IGNORE_TRAPS; _st->print_double(jvm_f2d(value)); }