void doPrint(std::ostream& out, T t, U u, Args... args) { out << t << ','; doPrint(out, u, args...); }
void SymbolizePrinter::println(uintptr_t address, const SymbolizedFrame& frame) { print(address, frame); doPrint("\n"); }
int main() { doPrint(std::cout, 34, "bla", 15); }
void SymbolizePrinter::print(uintptr_t address, const SymbolizedFrame& frame) { if (options_ & TERSE) { printTerse(address, frame); return; } SCOPE_EXIT { color(Color::DEFAULT); }; color(kAddressColor); AddressFormatter formatter; doPrint(formatter.format(address)); const char padBuf[] = " "; folly::StringPiece pad(padBuf, sizeof(padBuf) - 1 - (16 - 2 * sizeof(uintptr_t))); color(kFunctionColor); if (!frame.found) { doPrint(" (not found)"); return; } if (!frame.name || frame.name[0] == '\0') { doPrint(" (unknown)"); } else { char demangledBuf[1024]; demangle(frame.name, demangledBuf, sizeof(demangledBuf)); doPrint(" "); doPrint(demangledBuf[0] == '\0' ? frame.name : demangledBuf); } if (!(options_ & NO_FILE_AND_LINE)) { color(kFileColor); char fileBuf[PATH_MAX]; fileBuf[0] = '\0'; if (frame.location.hasFileAndLine) { frame.location.file.toBuffer(fileBuf, sizeof(fileBuf)); doPrint("\n"); doPrint(pad); doPrint(fileBuf); char buf[22]; uint32_t n = uint64ToBufferUnsafe(frame.location.line, buf); doPrint(":"); doPrint(StringPiece(buf, n)); } if (frame.location.hasMainFile) { char mainFileBuf[PATH_MAX]; mainFileBuf[0] = '\0'; frame.location.mainFile.toBuffer(mainFileBuf, sizeof(mainFileBuf)); if (!frame.location.hasFileAndLine || strcmp(fileBuf, mainFileBuf)) { doPrint("\n"); doPrint(pad); doPrint("-> "); doPrint(mainFileBuf); } } } }