| 69 | } |
| 70 | |
| 71 | std::string TaskTracer::Result::OutputToString() const { |
| 72 | std::string str; |
| 73 | if (frame_count > 0) { |
| 74 | str.reserve(1024); |
| 75 | } |
| 76 | char symbol_name[128]; |
| 77 | char unknown_symbol_name[] = "<unknown>"; |
| 78 | if (frame_count > 0) { |
| 79 | for (size_t i = 0; i < frame_count; ++i) { |
| 80 | butil::string_appendf(&str, "#%zu 0x%16p ", i, ips[i]); |
| 81 | if (absl::Symbolize(ips[i], symbol_name, arraysize(symbol_name))) { |
| 82 | str.append(symbol_name); |
| 83 | } else { |
| 84 | str.append(unknown_symbol_name); |
| 85 | } |
| 86 | if (i + 1 < frame_count) { |
| 87 | str.push_back('\n'); |
| 88 | } |
| 89 | } |
| 90 | } else { |
| 91 | str.append("No frame"); |
| 92 | } |
| 93 | if (error) { |
| 94 | str.append("\nError message: "); |
| 95 | str.append(err_msg); |
| 96 | } |
| 97 | |
| 98 | return str; |
| 99 | } |
| 100 | |
| 101 | void TaskTracer::Result::OutputToStream(std::ostream& os) const { |
| 102 | char symbol_name[128]; |
no test coverage detected