454 } |
454 } |
455 #endif |
455 #endif |
456 |
456 |
457 // tracing |
457 // tracing |
458 if (TraceExceptions) { |
458 if (TraceExceptions) { |
459 ttyLocker ttyl; |
|
460 ResourceMark rm(thread); |
459 ResourceMark rm(thread); |
461 tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", h_exception->print_value_string(), (address)h_exception()); |
460 Symbol* message = java_lang_Throwable::detail_message(h_exception()); |
|
461 ttyLocker ttyl; // Lock after getting the detail message |
|
462 if (message != NULL) { |
|
463 tty->print_cr("Exception <%s: %s> (" INTPTR_FORMAT ")", |
|
464 h_exception->print_value_string(), message->as_C_string(), |
|
465 (address)h_exception()); |
|
466 } else { |
|
467 tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", |
|
468 h_exception->print_value_string(), |
|
469 (address)h_exception()); |
|
470 } |
462 tty->print_cr(" thrown in interpreter method <%s>", h_method->print_value_string()); |
471 tty->print_cr(" thrown in interpreter method <%s>", h_method->print_value_string()); |
463 tty->print_cr(" at bci %d for thread " INTPTR_FORMAT, current_bci, thread); |
472 tty->print_cr(" at bci %d for thread " INTPTR_FORMAT, current_bci, thread); |
464 } |
473 } |
465 // Don't go paging in something which won't be used. |
474 // Don't go paging in something which won't be used. |
466 // else if (extable->length() == 0) { |
475 // else if (extable->length() == 0) { |