From 819ab1028897c7ae8ea07cb342d48118d29daa5d Mon Sep 17 00:00:00 2001 From: mtklein Date: Mon, 29 Feb 2016 17:02:52 -0800 Subject: [PATCH] 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 --- dm/DM.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/dm/DM.cpp b/dm/DM.cpp index 4279ea3..0190262 100644 --- a/dm/DM.cpp +++ b/dm/DM.cpp @@ -165,23 +165,37 @@ static std::atomic in_signal_handler{false}; } static void setup_crash_handler() { SetUnhandledExceptionFilter(handler); } -#else +#elif !defined(SK_BUILD_FOR_ANDROID) + #include #include + #include 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 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 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ -- 2.7.4