Commit 4da08b7d authored by Camillo Bruni's avatar Camillo Bruni Committed by Commit Bot

Push the top code objects onto the stack in PushStackTraceAndDie

Doing so will increase the likelyhood of getting the interesting code objects
into the mindump.

Change-Id: I6c6d06bbfe7ab8649139b1146bda0f9b3d679064
Reviewed-on: https://chromium-review.googlesource.com/468967
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#44444}
parent 82fa48ad
......@@ -322,6 +322,27 @@ void Isolate::PushStackTraceAndDie(unsigned int magic, void* ptr1, void* ptr2,
// TODO(dcarney): convert buffer to utf8?
base::OS::PrintError("Stacktrace (%x-%x) %p %p: %s\n", magic, magic2, ptr1,
ptr2, reinterpret_cast<char*>(buffer));
PushCodeObjectsAndDie(0xdeadc0de);
}
void Isolate::PushCodeObjectsAndDie(unsigned int magic) {
const int kMaxCodeObjects = 16;
// Mark as volatile to lower the probability of optimizing code_objects
// away.
Code* volatile code_objects[kMaxCodeObjects];
StackFrameIterator it(this);
int numCodeObjects = 0;
for (; !it.done() && numCodeObjects < kMaxCodeObjects; it.Advance()) {
code_objects[numCodeObjects++] = it.frame()->unchecked_code();
}
// Keep the top raw code object pointers on the stack in the hope that the
// corresponding pages end up more frequently in the minidump.
base::OS::PrintError(
"\nCodeObjects (%p length=%i): 1:%p 2:%p 3:%p 4:%p...\n\n",
static_cast<void*>(code_objects[0]), numCodeObjects,
static_cast<void*>(code_objects[0]), static_cast<void*>(code_objects[1]),
static_cast<void*>(code_objects[2]), static_cast<void*>(code_objects[4]));
base::OS::Abort();
}
......@@ -764,7 +785,6 @@ static void PrintFrames(Isolate* isolate,
}
}
void Isolate::PrintStack(StringStream* accumulator, PrintStackMode mode) {
// The MentionedObjectCache is not GC-proof at the moment.
DisallowHeapAllocation no_gc;
......
......@@ -704,6 +704,7 @@ class Isolate {
Handle<String> StackTraceString();
NO_INLINE(void PushStackTraceAndDie(unsigned int magic, void* ptr1,
void* ptr2, unsigned int magic2));
NO_INLINE(void PushCodeObjectsAndDie(unsigned int magic));
Handle<JSArray> CaptureCurrentStackTrace(
int frame_limit,
StackTrace::StackTraceOptions options);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment