Index: runtime/vm/profiler.cc |
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc |
index 3059a2040df7d085f10221e907d6e8e0cc92fcc5..a99b48ee84b38090e31fdc1e74dc7b6e2eef88a3 100644 |
--- a/runtime/vm/profiler.cc |
+++ b/runtime/vm/profiler.cc |
@@ -1035,7 +1035,7 @@ static bool CheckIsolate(Isolate* isolate) { |
} |
void Profiler::DumpStackTrace(void* context) { |
-#if defined(HOST_OS_LINUX) || defined(HOST_OS_MACOS) |
+#if defined(HOST_OS_LINUX) || defined(HOST_OS_MACOS) || defined(HOST_OS_ANDROID) |
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context); |
mcontext_t mcontext = ucontext->uc_mcontext; |
uword pc = SignalHandler::GetProgramCounter(mcontext); |
@@ -1085,12 +1085,14 @@ void Profiler::DumpStackTrace(uword sp, uword fp, uword pc, bool for_crash) { |
Thread* thread = Thread::Current(); |
if (thread == NULL) { |
+ OS::PrintErr("Stack dump aborted because no current Dart thread.\n"); |
return; |
} |
OSThread* os_thread = thread->os_thread(); |
ASSERT(os_thread != NULL); |
Isolate* isolate = thread->isolate(); |
if (!CheckIsolate(isolate)) { |
+ OS::PrintErr("Stack dump aborted because CheckIsolate failed.\n"); |
return; |
} |
@@ -1101,7 +1103,7 @@ void Profiler::DumpStackTrace(uword sp, uword fp, uword pc, bool for_crash) { |
uword stack_upper = 0; |
if (!InitialRegisterCheck(pc, fp, sp)) { |
- OS::PrintErr("Stack dump aborted because InitialRegisterCheck.\n"); |
+ OS::PrintErr("Stack dump aborted because InitialRegisterCheck failed.\n"); |
return; |
} |
@@ -1109,7 +1111,7 @@ void Profiler::DumpStackTrace(uword sp, uword fp, uword pc, bool for_crash) { |
&stack_upper, |
/*get_os_thread_bounds=*/true)) { |
OS::PrintErr( |
- "Stack dump aborted because GetAndValidateThreadStackBounds.\n"); |
+ "Stack dump aborted because GetAndValidateThreadStackBounds failed.\n"); |
return; |
} |