void StackFrameInfo::print_on(outputStream* st) const { ResourceMark rm; java_lang_Throwable::print_stack_element(st, method(), bci()); int len = (_locked_monitors != NULL ? _locked_monitors->length() : 0); for (int i = 0; i < len; i++) { oop o = _locked_monitors->at(i); InstanceKlass* ik = InstanceKlass::cast(o->klass()); st->print_cr("\t- locked <" INTPTR_FORMAT "> (a %s)", (address)o, ik->external_name()); } }
void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field) { Symbol* name_symbol = SymbolTable::probe(name, (int)strlen(name)); Symbol* signature_symbol = SymbolTable::probe(signature, (int)strlen(signature)); if (name_symbol == NULL || signature_symbol == NULL) { guarantee(false, err_msg("symbol with name %s and signature %s was not found in symbol table (klass=%s)", name, signature, klass->name()->as_C_string())); } InstanceKlass* ik = InstanceKlass::cast(klass); fieldDescriptor fd; if (!ik->find_field(name_symbol, signature_symbol, &fd)) { ResourceMark rm; fatal(err_msg("Invalid layout of %s at %s", name_symbol->as_C_string(), ik->external_name())); } guarantee(fd.is_static() == static_field, "static/instance mismatch"); dest_offset = fd.offset(); }
void ConcurrentLocksDump::print_locks_on(JavaThread* t, outputStream* st) { st->print_cr(" Locked ownable synchronizers:"); ThreadConcurrentLocks* tcl = thread_concurrent_locks(t); GrowableArray<instanceOop>* locks = (tcl != NULL ? tcl->owned_locks() : NULL); if (locks == NULL || locks->is_empty()) { st->print_cr("\t- None"); st->cr(); return; } for (int i = 0; i < locks->length(); i++) { instanceOop obj = locks->at(i); InstanceKlass* ik = InstanceKlass::cast(obj->klass()); st->print_cr("\t- <" INTPTR_FORMAT "> (a %s)", (address)obj, ik->external_name()); } st->cr(); }