< prev index next >
src/share/vm/utilities/debug.cpp
Print this page
rev 13109 : imported patch move_pns
*** 581,597 ****
tty->cr();
if (p->has_last_Java_frame()) {
// If the last_Java_fp is set we are in C land and
// can call the standard stack_trace function.
- #ifdef PRODUCT
p->print_stack();
} else {
tty->print_cr("Cannot find the last Java frame, printing stack disabled.");
#else // !PRODUCT
- p->trace_stack();
- } else {
frame f = os::current_frame();
RegisterMap reg_map(p);
f = f.sender(®_map);
tty->print("(guessing starting frame id=" PTR_FORMAT " based on current fp)\n", p2i(f.id()));
p->trace_stack_from(vframe::new_vframe(&f, ®_map, p));
--- 581,595 ----
tty->cr();
if (p->has_last_Java_frame()) {
// If the last_Java_fp is set we are in C land and
// can call the standard stack_trace function.
p->print_stack();
} else {
+ #ifdef PRODUCT
tty->print_cr("Cannot find the last Java frame, printing stack disabled.");
#else // !PRODUCT
frame f = os::current_frame();
RegisterMap reg_map(p);
f = f.sender(®_map);
tty->print("(guessing starting frame id=" PTR_FORMAT " based on current fp)\n", p2i(f.id()));
p->trace_stack_from(vframe::new_vframe(&f, ®_map, p));
*** 757,817 ****
tty->print_cr("compiler debugging");
tty->print_cr(" debug() - to set things up for compiler debugging");
tty->print_cr(" ndebug() - undo debug");
}
- #endif // !PRODUCT
-
- void print_native_stack(outputStream* st, frame fr, Thread* t, char* buf, int buf_size) {
-
- // see if it's a valid frame
- if (fr.pc()) {
- st->print_cr("Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)");
-
- int count = 0;
- while (count++ < StackPrintLimit) {
- fr.print_on_error(st, buf, buf_size);
- st->cr();
- // Compiled code may use EBP register on x86 so it looks like
- // non-walkable C frame. Use frame.sender() for java frames.
- if (t && t->is_Java_thread()) {
- // Catch very first native frame by using stack address.
- // For JavaThread stack_base and stack_size should be set.
- if (!t->on_local_stack((address)(fr.real_fp() + 1))) {
- break;
- }
- if (fr.is_java_frame() || fr.is_native_frame() || fr.is_runtime_frame()) {
- RegisterMap map((JavaThread*)t, false); // No update
- fr = fr.sender(&map);
- } else {
- fr = os::get_sender_for_C_frame(&fr);
- }
- } else {
- // is_first_C_frame() does only simple checks for frame pointer,
- // it will pass if java compiled code has a pointer in EBP.
- if (os::is_first_C_frame(&fr)) break;
- fr = os::get_sender_for_C_frame(&fr);
- }
- }
-
- if (count > StackPrintLimit) {
- st->print_cr("...<more frames>...");
- }
-
- st->cr();
- }
- }
-
- #ifndef PRODUCT
-
extern "C" void pns(void* sp, void* fp, void* pc) { // print native stack
Command c("pns");
static char buf[O_BUFLEN];
Thread* t = Thread::current_or_null();
// Call generic frame constructor (certain arguments may be ignored)
frame fr(sp, fp, pc);
! print_native_stack(tty, fr, t, buf, sizeof(buf));
}
#endif // !PRODUCT
//////////////////////////////////////////////////////////////////////////////
--- 755,771 ----
tty->print_cr("compiler debugging");
tty->print_cr(" debug() - to set things up for compiler debugging");
tty->print_cr(" ndebug() - undo debug");
}
extern "C" void pns(void* sp, void* fp, void* pc) { // print native stack
Command c("pns");
static char buf[O_BUFLEN];
Thread* t = Thread::current_or_null();
// Call generic frame constructor (certain arguments may be ignored)
frame fr(sp, fp, pc);
! VMError::print_native_stack(tty, fr, t, buf, sizeof(buf));
}
#endif // !PRODUCT
//////////////////////////////////////////////////////////////////////////////
< prev index next >