From: David Blaikie Date: Tue, 31 Jan 2017 22:19:38 +0000 (+0000) Subject: Add a verbose/human readable mode to llvm-symbolizer to investigate discriminators... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fbad5bd6910ae387588281f8cd518540832df391;p=llvm Add a verbose/human readable mode to llvm-symbolizer to investigate discriminators and other line table/backtrace features Patch by Simon Que! Differential Revision: https://reviews.llvm.org/D29094 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293697 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/DebugInfo/Symbolize/DIPrinter.h b/include/llvm/DebugInfo/Symbolize/DIPrinter.h index 49f86eae01c..ab82be3706d 100644 --- a/include/llvm/DebugInfo/Symbolize/DIPrinter.h +++ b/include/llvm/DebugInfo/Symbolize/DIPrinter.h @@ -29,15 +29,18 @@ class DIPrinter { bool PrintFunctionNames; bool PrintPretty; int PrintSourceContext; + bool Verbose; void print(const DILineInfo &Info, bool Inlined); void printContext(const std::string &FileName, int64_t Line); public: DIPrinter(raw_ostream &OS, bool PrintFunctionNames = true, - bool PrintPretty = false, int PrintSourceContext = 0) + bool PrintPretty = false, int PrintSourceContext = 0, + bool Verbose = false) : OS(OS), PrintFunctionNames(PrintFunctionNames), - PrintPretty(PrintPretty), PrintSourceContext(PrintSourceContext) {} + PrintPretty(PrintPretty), PrintSourceContext(PrintSourceContext), + Verbose(Verbose) {} DIPrinter &operator<<(const DILineInfo &Info); DIPrinter &operator<<(const DIInliningInfo &Info); diff --git a/lib/DebugInfo/Symbolize/DIPrinter.cpp b/lib/DebugInfo/Symbolize/DIPrinter.cpp index be5c603a38e..aae009ecb16 100644 --- a/lib/DebugInfo/Symbolize/DIPrinter.cpp +++ b/lib/DebugInfo/Symbolize/DIPrinter.cpp @@ -78,8 +78,16 @@ void DIPrinter::print(const DILineInfo &Info, bool Inlined) { std::string Filename = Info.FileName; if (Filename == kDILineInfoBadString) Filename = kBadString; - OS << Filename << ":" << Info.Line << ":" << Info.Column << "\n"; - printContext(Filename, Info.Line); + if (!Verbose) { + OS << Filename << ":" << Info.Line << ":" << Info.Column << "\n"; + printContext(Filename, Info.Line); + return; + } + OS << " Filename: " << Filename << "\n"; + OS << " Line: " << Info.Line << "\n"; + OS << " Column: " << Info.Column << "\n"; + if (Info.Discriminator) + OS << " Discriminator: " << Info.Discriminator << "\n"; } DIPrinter &DIPrinter::operator<<(const DILineInfo &Info) { diff --git a/tools/llvm-symbolizer/llvm-symbolizer.cpp b/tools/llvm-symbolizer/llvm-symbolizer.cpp index fc37dea4c48..c9e0cc2b3b0 100644 --- a/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -85,6 +85,9 @@ static cl::opt ClPrintSourceContextLines( "print-source-context-lines", cl::init(0), cl::desc("Print N number of source file context")); +static cl::opt ClVerbose("verbose", cl::init(false), + cl::desc("Print verbose line info")); + template static bool error(Expected &ResOrErr) { if (ResOrErr) @@ -160,7 +163,7 @@ int main(int argc, char **argv) { LLVMSymbolizer Symbolizer(Opts); DIPrinter Printer(outs(), ClPrintFunctions != FunctionNameKind::None, - ClPrettyPrint, ClPrintSourceContextLines); + ClPrettyPrint, ClPrintSourceContextLines, ClVerbose); const int kMaxInputStringLength = 1024; char InputString[kMaxInputStringLength];