aboutsummaryrefslogtreecommitdiffhomepage
path: root/dm/DM.cpp
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-02-29 17:02:52 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-29 17:02:52 -0800
commit819ab1028897c7ae8ea07cb342d48118d29daa5d (patch)
tree2f38043d427135af094a007f22d3191e7b7f9b83 /dm/DM.cpp
parente9c8442bfc3a44b00cd64529882d7a8bd4bc6030 (diff)
print stack trace on crash, tweak formatting, _Exit hard
Mac example: 1 srcs * 1 sinks + 0 tests == 1 tasks 0ns elapsed, 1 active, 0 queued, 11MB RAM, 11MB peak f16 gm dstreadshuffle ../../src/core/SkXfermode.cpp:935: fatal error: ""r.fVec[i] >= min && r.fVec[i] <= max"" Caught signal 6 [Abort trap: 6], was running: f16 gm dstreadshuffle Stack trace: 0 dm 0x000000010f23fc9d _ZZL19setup_crash_handlervENK3$_5clEi + 397 1 dm 0x000000010f23fb06 _ZZL19setup_crash_handlervEN3$_58__invokeEi + 22 2 libsystem_platform.dylib 0x00007fff9d44e52a _sigtramp + 26 3 ??? 0x00007fff9900b902 0x0 + 140735760349442 4 libsystem_c.dylib 0x00007fff96a836e7 abort + 129 5 dm 0x000000010fcb67c9 _Z17sk_abort_no_printv + 9 6 dm 0x000000010f90fc1f _ZL11assert_unitRK6SkPM4f + 175 7 dm 0x000000010f90e957 _Z7proc_4fIXadL_ZL10lighten_4fRK4SkNxILi4EfES3_EEE6SkPM4fRKS4_S6_ + 103 8 dm 0x000000010f918946 _Z10xfer_u64_nIL7DstType1EEvPK10SkXfermodePyPK6SkPM4fiPKh + 182 9 dm 0x000000010f7a5f3e _ZN22SkState_Shader_BlitterI7State64E9blitAntiHEiiPKhPKs + 398 10 dm 0x000000010f3c730c _ZN9SkBlitter10blitAntiH2Eiijj + 108 11 dm 0x000000010f8d76f4 _ZN25Vertish_SkAntiHairBlitter7drawCapEiiii + 164 12 dm 0x000000010f8d4d92 _ZL16do_anti_hairlineiiiiPK7SkIRectP9SkBlitter + 3058 13 dm 0x000000010f8d40f4 _ZN6SkScan15AntiHairLineRgnEPK7SkPointiPK8SkRegionP9SkBlitter + 900 14 dm 0x000000010f8d8fff _ZL8hairquadPK7SkPointPK8SkRegionP9SkBlitteriPFvS1_iS4_S6_E + 719 15 dm 0x000000010f8da838 _Z9hair_pathILN7SkPaint3CapE0EEvRK6SkPathRK12SkRasterClipP9SkBlitterPFvPK7SkPointiPK8SkRegionS9_E + 1048 16 dm 0x000000010f8d86dc _ZN6SkScan12AntiHairPathERK6SkPathRK12SkRasterClipP9SkBlitter + 44 17 dm 0x000000010f7da8ff _ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixbbP9SkBlitter + 2239 18 dm 0x000000010f774993 _ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb + 83 19 dm 0x000000010f774031 _ZN14SkBitmapDevice8drawPathERK6SkDrawRK6SkPathRK7SkPaintPK8SkMatrixb + 97 20 dm 0x000000010f773f6b _ZN14SkBitmapDevice8drawOvalERK6SkDrawRK6SkRectRK7SkPaint + 139 21 dm 0x000000010f7b5072 _ZN8SkCanvas10onDrawOvalERK6SkRectRK7SkPaint + 626 22 dm 0x000000010f7b38a5 _ZN8SkCanvas8drawOvalERK6SkRectRK7SkPaint + 69 23 dm 0x000000010f7b9ee6 _ZN8SkCanvas10drawCircleEfffRK7SkPaint + 294 24 dm 0x000000010f614039 _ZN6skiagm14DstReadShuffle9drawShapeEP8SkCanvasP7SkPaintNS0_9ShapeTypeE + 249 25 dm 0x000000010f613b89 _ZN6skiagm14DstReadShuffle6onDrawEP8SkCanvas + 425 26 dm 0x000000010f268b17 _ZN6skiagm2GM11drawContentEP8SkCanvas + 71 27 dm 0x000000010f268a6c _ZN6skiagm2GM4drawEP8SkCanvas + 60 28 dm 0x000000010f25186b _ZNK2DM5GMSrc4drawEP8SkCanvas + 123 29 dm 0x000000010f256de7 _ZNK2DM10RasterSink4drawERKNS_3SrcEP8SkBitmapP9SkWStreamP8SkString + 295 30 dm 0x000000010f246a96 _ZN4Task3RunERKS_ + 358 31 dm 0x000000010f2447e5 _ZZ7dm_mainvENK3$_3clEv + 21 32 dm 0x000000010f2447bd _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZ7dm_mainvE3$_3EEEvDpOT_ + 45 33 dm 0x000000010f24475c _ZNSt3__110__function6__funcIZ7dm_mainvE3$_3NS_9allocatorIS2_EEFvvEEclEv + 44 34 dm 0x000000010f406aba _ZNKSt3__18functionIFvvEEclEv + 26 35 dm 0x000000010f8fc168 _ZN12_GLOBAL__N_110ThreadPool4WaitEP8SkAtomicIiL15sk_memory_order5EE + 328 36 dm 0x000000010f8fc00c _ZN11SkTaskGroup4waitEv + 28 37 dm 0x000000010f23e9c4 _Z7dm_mainv + 1940 38 dm 0x000000010f23fa77 main + 39 39 dm 0x000000010f23e1a4 start + 52 40 ??? 0x0000000000000007 0x0 + 7 BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1753503002 Review URL: https://codereview.chromium.org/1753503002
Diffstat (limited to 'dm/DM.cpp')
-rw-r--r--dm/DM.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 4279ea37eb..0190262787 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -165,23 +165,37 @@ static std::atomic<bool> in_signal_handler{false};
}
static void setup_crash_handler() { SetUnhandledExceptionFilter(handler); }
-#else
+#elif !defined(SK_BUILD_FOR_ANDROID)
+ #include <execinfo.h>
#include <signal.h>
+ #include <stdlib.h>
static void setup_crash_handler() {
const int kSignals[] = { SIGABRT, SIGBUS, SIGFPE, SIGILL, SIGSEGV };
for (int sig : kSignals) {
signal(sig, [](int sig) {
if (!in_signal_handler.exchange(true)) {
- SkDebugf("\nCaught signal %d [%s].\n", sig, strsignal(sig));
- print_status();
+ SkAutoTAcquire<SkSpinlock> lock(gMutex);
+ SkDebugf("\nCaught signal %d [%s], was running:\n", sig, strsignal(sig));
+ for (auto& task : gRunning) {
+ SkDebugf("\t%s\n", task.c_str());
+ }
+
+ void* stack[64];
+ int count = backtrace(stack, SK_ARRAY_COUNT(stack));
+ char** symbols = backtrace_symbols(stack, count);
+ SkDebugf("\nStack trace:\n");
+ for (int i = 0; i < count; i++) {
+ SkDebugf(" %s\n", symbols[i]);
+ }
}
- // Reraise this signal to the default handler... hopefully, exit.
- signal(sig, SIG_DFL);
- raise(sig);
+ _Exit(sig);
});
}
}
+
+#else // Android
+ static void setup_crash_handler() {}
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/