< prev index next >

src/hotspot/share/utilities/vmError.cpp

Print this page
rev 52037 : 8211852: inspect stack during error reporting
Reviewed-by:


 731        os::print_siginfo(st, _siginfo);
 732        st->cr();
 733      }
 734 
 735   STEP("CDS archive access warning")
 736 
 737      // Print an explicit hint if we crashed on access to the CDS archive.
 738      if (_verbose && _siginfo) {
 739        check_failing_cds_access(st, _siginfo);
 740        st->cr();
 741      }
 742 
 743   STEP("printing register info")
 744 
 745      // decode register contents if possible
 746      if (_verbose && _context && Universe::is_fully_initialized()) {
 747        os::print_register_info(st, _context);
 748        st->cr();
 749      }
 750 


















 751   STEP("printing registers, top of stack, instructions near pc")
 752 
 753      // registers, top of stack, instructions near pc
 754      if (_verbose && _context) {
 755        os::print_context(st, _context);
 756        st->cr();
 757      }
 758 
 759   STEP("printing code blob if possible")
 760 
 761      if (_verbose && _context) {
 762        CodeBlob* cb = CodeCache::find_blob(_pc);
 763        if (cb != NULL) {
 764          if (Interpreter::contains(_pc)) {
 765            // The interpreter CodeBlob is very large so try to print the codelet instead.
 766            InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
 767            if (codelet != NULL) {
 768              codelet->print_on(st);
 769              Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
 770            }




 731        os::print_siginfo(st, _siginfo);
 732        st->cr();
 733      }
 734 
 735   STEP("CDS archive access warning")
 736 
 737      // Print an explicit hint if we crashed on access to the CDS archive.
 738      if (_verbose && _siginfo) {
 739        check_failing_cds_access(st, _siginfo);
 740        st->cr();
 741      }
 742 
 743   STEP("printing register info")
 744 
 745      // decode register contents if possible
 746      if (_verbose && _context && Universe::is_fully_initialized()) {
 747        os::print_register_info(st, _context);
 748        st->cr();
 749      }
 750 
 751   STEP("printing top of stack info")
 752 
 753      // decode stack contents if possible
 754      if (_verbose && _context && Universe::is_fully_initialized()) {
 755        frame fr = os::fetch_frame_from_context(_context);
 756        const int slots = 8;
 757        const intptr_t *start = fr.sp();
 758        const intptr_t *end = start + slots;
 759        if (is_aligned(start, sizeof(intptr_t)) && os::is_readable_range(start, end)) {
 760          st->print_cr("Stack slot to memory mapping:");
 761          for (int i = 0; i < slots; ++i) {
 762            st->print("stack at sp + %d slots: ", i);
 763            os::print_location(st, *(start + i));
 764          }
 765        }
 766        st->cr();
 767      }
 768 
 769   STEP("printing registers, top of stack, instructions near pc")
 770 
 771      // registers, top of stack, instructions near pc
 772      if (_verbose && _context) {
 773        os::print_context(st, _context);
 774        st->cr();
 775      }
 776 
 777   STEP("printing code blob if possible")
 778 
 779      if (_verbose && _context) {
 780        CodeBlob* cb = CodeCache::find_blob(_pc);
 781        if (cb != NULL) {
 782          if (Interpreter::contains(_pc)) {
 783            // The interpreter CodeBlob is very large so try to print the codelet instead.
 784            InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
 785            if (codelet != NULL) {
 786              codelet->print_on(st);
 787              Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
 788            }


< prev index next >