From 7a201f599b4f5dd78910b0e635ffe89db4b27ea8 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Fri, 29 Jun 2012 15:11:16 +0000 Subject: [PATCH] Put even more debug information on stack when aborting. R=jkummerow@chromium.org BUG=131642 TEST= Review URL: https://chromiumcodereview.appspot.com/10698048 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11954 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/debug.cc | 24 +++++++++++++----------- src/debug.h | 3 +-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/debug.cc b/src/debug.cc index ffe5b0d..1f5164f 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -896,17 +896,17 @@ void Debug::PutValuesOnStackAndDie(int start, Address c_entry_fp, Address last_fp, Address larger_fp, - Address last_in_fp, - Address last_out_fp, int count, + char* stack, int end) { OS::PrintError("start: %d\n", start); OS::PrintError("c_entry_fp: %p\n", static_cast(c_entry_fp)); OS::PrintError("last_fp: %p\n", static_cast(last_fp)); OS::PrintError("larger_fp: %p\n", static_cast(larger_fp)); - OS::PrintError("last_in_fp: %p\n", static_cast(last_in_fp)); - OS::PrintError("last_out_fp: %p\n", static_cast(last_out_fp)); OS::PrintError("count: %d\n", count); + if (stack != NULL) { + OS::PrintError("stack: %s\n", stack); + } OS::PrintError("end: %d\n", end); OS::Abort(); } @@ -1014,25 +1014,27 @@ Object* Debug::Break(Arguments args) { // - FP of the frame at which we plan to stop stepping out (last FP). // - current FP that's larger than last FP. // - Counter for the number of steps to step out. + // - stack trace string. if (it.done()) { // We crawled the entire stack, never reaching last_fp_. PutValuesOnStackAndDie(0xBEEEEEEE, frame->fp(), thread_local_.last_fp_, - NULL, - thread_local_.step_into_fp_, - thread_local_.step_out_fp_, + reinterpret_cast
(0xDEADDEAD), count, - 0xFEEEEEEE); + NULL, + 0xCEEEEEEE); } else if (it.frame()->fp() != thread_local_.last_fp_) { // We crawled over last_fp_, without getting a match. - PutValuesOnStackAndDie(0xBEEEEEEE, + Handle stack = isolate_->StackTraceString(); + char buffer[2048]; + String::WriteToFlat(*stack, buffer, 0, 2047); + PutValuesOnStackAndDie(0xDEEEEEEE, frame->fp(), thread_local_.last_fp_, it.frame()->fp(), - thread_local_.step_into_fp_, - thread_local_.step_out_fp_, count, + buffer, 0xFEEEEEEE); } diff --git a/src/debug.h b/src/debug.h index 445137c..9b5c250 100644 --- a/src/debug.h +++ b/src/debug.h @@ -236,9 +236,8 @@ class Debug { Address c_entry_fp, Address last_fp, Address larger_fp, - Address last_in_fp, - Address last_out_fp, int count, + char* stack, int end)); Object* Break(Arguments args); void SetBreakPoint(Handle function, -- 2.7.4