From edf8f25a1c112e84951a969061f58670cb44bd22 Mon Sep 17 00:00:00 2001 From: Dmitry Pleshkov Date: Tue, 5 Apr 2016 21:39:18 -0700 Subject: [PATCH] Allow usage of Symbolizer options for ExceptionStats printing Summary: For exceptions aggregation conveniece Reviewed By: philippv Differential Revision: D3128132 fb-gh-sync-id: 48c72df364228c1d2c8f29161c2b85c131b4fea8 fbshipit-source-id: 48c72df364228c1d2c8f29161c2b85c131b4fea8 --- .../experimental/exception_tracer/ExceptionTracer.cpp | 11 +++++++++-- folly/experimental/exception_tracer/ExceptionTracer.h | 4 ++++ folly/experimental/symbolizer/Symbolizer.cpp | 8 +++++--- folly/experimental/symbolizer/Symbolizer.h | 3 +++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/folly/experimental/exception_tracer/ExceptionTracer.cpp b/folly/experimental/exception_tracer/ExceptionTracer.cpp index f59d427b..1e3159a5 100644 --- a/folly/experimental/exception_tracer/ExceptionTracer.cpp +++ b/folly/experimental/exception_tracer/ExceptionTracer.cpp @@ -44,6 +44,14 @@ namespace folly { namespace exception_tracer { std::ostream& operator<<(std::ostream& out, const ExceptionInfo& info) { + printExceptionInfo(out, info, SymbolizePrinter::COLOR_IF_TTY); + return out; +} + +void printExceptionInfo( + std::ostream& out, + const ExceptionInfo& info, + int options) { out << "Exception type: "; if (info.type) { out << folly::demangle(*info.type); @@ -68,7 +76,7 @@ std::ostream& operator<<(std::ostream& out, const ExceptionInfo& info) { Symbolizer symbolizer; symbolizer.symbolize(addresses, frames.data(), frameCount); - OStreamSymbolizePrinter osp(out, SymbolizePrinter::COLOR_IF_TTY); + OStreamSymbolizePrinter osp(out, options); osp.println(addresses, frames.data(), frameCount); } } catch (const std::exception& e) { @@ -76,7 +84,6 @@ std::ostream& operator<<(std::ostream& out, const ExceptionInfo& info) { } catch (...) { out << "\n !!! caught unexpected exception\n"; } - return out; } namespace { diff --git a/folly/experimental/exception_tracer/ExceptionTracer.h b/folly/experimental/exception_tracer/ExceptionTracer.h index f356b9bb..febe9f24 100644 --- a/folly/experimental/exception_tracer/ExceptionTracer.h +++ b/folly/experimental/exception_tracer/ExceptionTracer.h @@ -35,6 +35,10 @@ struct ExceptionInfo { std::vector frames; // front() is top of stack }; +void printExceptionInfo( + std::ostream& out, + const ExceptionInfo& info, + int options); std::ostream& operator<<(std::ostream& out, const ExceptionInfo& info); /** diff --git a/folly/experimental/symbolizer/Symbolizer.cpp b/folly/experimental/symbolizer/Symbolizer.cpp index f89482e4..926e5ffe 100644 --- a/folly/experimental/symbolizer/Symbolizer.cpp +++ b/folly/experimental/symbolizer/Symbolizer.cpp @@ -345,10 +345,12 @@ void SymbolizePrinter::print(uintptr_t address, const SymbolizedFrame& frame) { SCOPE_EXIT { color(Color::DEFAULT); }; - color(kAddressColor); + if (!(options_ & NO_FRAME_ADDRESS)) { + color(kAddressColor); - AddressFormatter formatter; - doPrint(formatter.format(address)); + AddressFormatter formatter; + doPrint(formatter.format(address)); + } const char padBuf[] = " "; folly::StringPiece pad(padBuf, diff --git a/folly/experimental/symbolizer/Symbolizer.h b/folly/experimental/symbolizer/Symbolizer.h index 232cb30b..2914af83 100644 --- a/folly/experimental/symbolizer/Symbolizer.h +++ b/folly/experimental/symbolizer/Symbolizer.h @@ -203,6 +203,9 @@ class SymbolizePrinter { // Colorize output only if output is printed to a TTY (ANSI escape code) COLOR_IF_TTY = 1 << 3, + + // Skip frame address information + NO_FRAME_ADDRESS = 1 << 4, }; // NOTE: enum values used as indexes in kColorMap. -- 2.34.1