diff options
author | Primiano Tucci <primiano@google.com> | 2023-11-09 22:23:16 +0000 |
---|---|---|
committer | Primiano Tucci <primiano@google.com> | 2023-11-09 22:23:16 +0000 |
commit | 48c0ed4e4432a76a9ac339e2625198d5932d7726 (patch) | |
tree | 90d661b8cb8540f50e912a6f4fc70096a921fb24 | |
parent | dde07b7899f1ab725df391faae30ca613ac675e0 (diff) | |
download | perfetto-48c0ed4e4432a76a9ac339e2625198d5932d7726.tar.gz |
perfetto_cmd: improve error message when forgetting --txt
Here's a common mistake that most people make: passing a textual
config but forgetting --txt.
Right now the error is very generic and doesn't help figuring out
what to do.
We can do some basic guess work to suggest the right thing.
Change-Id: Idd75960087127efe48174588fb58920f9af75871
-rw-r--r-- | src/perfetto_cmd/perfetto_cmd.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/perfetto_cmd/perfetto_cmd.cc b/src/perfetto_cmd/perfetto_cmd.cc index 323d7bc03..2667354ff 100644 --- a/src/perfetto_cmd/perfetto_cmd.cc +++ b/src/perfetto_cmd/perfetto_cmd.cc @@ -600,6 +600,7 @@ std::optional<int> PerfettoCmd::ParseCmdlineAndMaybeDaemonize(int argc, trace_config_.reset(new TraceConfig()); bool parsed = false; + bool cfg_could_be_txt = false; const bool will_trace_or_trigger = !is_attach() && !query_service_; if (!will_trace_or_trigger) { if ((!trace_config_raw.empty() || has_config_options)) { @@ -625,6 +626,14 @@ std::optional<int> PerfettoCmd::ParseCmdlineAndMaybeDaemonize(int argc, trace_config_.get()); } else { parsed = trace_config_->ParseFromString(trace_config_raw); + cfg_could_be_txt = + !parsed && std::all_of(trace_config_raw.begin(), + trace_config_raw.end(), [](char c) { + // This is equiv to: isprint(c) || isspace(x) + // but doesn't depend on and load the locale. + return (c >= 32 && c <= 126) || + (c >= 9 && c <= 13); + }); } } @@ -633,6 +642,12 @@ std::optional<int> PerfettoCmd::ParseCmdlineAndMaybeDaemonize(int argc, trace_config_raw.clear(); } else if (will_trace_or_trigger && !clone_tsid_) { PERFETTO_ELOG("The trace config is invalid, bailing out."); + if (cfg_could_be_txt) { + PERFETTO_ELOG( + "Looks like you are passing a textual config but I'm expecting a " + "proto-encoded binary config."); + PERFETTO_ELOG("Try adding --txt to the cmdline."); + } return 1; } |