Index: src/debug.cc |
diff --git a/src/debug.cc b/src/debug.cc |
index 777e23dac81a476d16ea77fbb4558be98ae98d43..40ddabb3cb1a37a85958a2b6799bdc3ba1330ba7 100644 |
--- a/src/debug.cc |
+++ b/src/debug.cc |
@@ -892,6 +892,7 @@ void Debug::Iterate(ObjectVisitor* v) { |
} |
+// TODO(131642): Remove this when fixed. |
void Debug::PutValuesOnStackAndDie(int start, |
Address c_entry_fp, |
Address last_fp, |
@@ -1009,6 +1010,7 @@ Object* Debug::Break(Arguments args) { |
it.Advance(); |
} |
+ // TODO(131642): Remove this when fixed. |
// Catch the cases that would lead to crashes and capture |
// - C entry FP at which to start stack crawl. |
// - FP of the frame at which we plan to stop stepping out (last FP). |
@@ -1017,18 +1019,23 @@ Object* Debug::Break(Arguments args) { |
// - stack trace string. |
if (it.done()) { |
// We crawled the entire stack, never reaching last_fp_. |
+ Handle<String> stack = isolate_->StackTraceString(); |
+ char buffer[8192]; |
+ int length = Min(8192, stack->length()); |
+ String::WriteToFlat(*stack, buffer, 0, length - 1); |
PutValuesOnStackAndDie(0xBEEEEEEE, |
frame->fp(), |
thread_local_.last_fp_, |
reinterpret_cast<Address>(0xDEADDEAD), |
count, |
- NULL, |
+ buffer, |
0xCEEEEEEE); |
} else if (it.frame()->fp() != thread_local_.last_fp_) { |
// We crawled over last_fp_, without getting a match. |
Handle<String> stack = isolate_->StackTraceString(); |
char buffer[8192]; |
- String::WriteToFlat(*stack, buffer, 0, 8191); |
+ int length = Min(8192, stack->length()); |
+ String::WriteToFlat(*stack, buffer, 0, length - 1); |
PutValuesOnStackAndDie(0xDEEEEEEE, |
frame->fp(), |
thread_local_.last_fp_, |