aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrimiano Tucci <primiano@google.com>2023-11-09 22:23:16 +0000
committerPrimiano Tucci <primiano@google.com>2023-11-09 22:23:16 +0000
commit48c0ed4e4432a76a9ac339e2625198d5932d7726 (patch)
tree90d661b8cb8540f50e912a6f4fc70096a921fb24
parentdde07b7899f1ab725df391faae30ca613ac675e0 (diff)
downloadperfetto-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.cc15
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;
}