linux-trace-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nicolas Sterchele <nicolas@sterchelen.net>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Linux Trace Devel <linux-trace-devel@vger.kernel.org>
Subject: Re: [PATCH] trace-cmd list: Add --full to show print fmt of an event
Date: Thu, 22 Apr 2021 22:41:54 +0200	[thread overview]
Message-ID: <YIHfki40RQf+J8/Y@hercule> (raw)
In-Reply-To: <20210416141720.57a7963d@gandalf.local.home>

On 2021-04-16 14:17, Steven Rostedt wrote:
>From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
>
>There's several times I want to see the print fmt from the event's format
>file, and there's no way to do that with trace-cmd list -e. Add a --full
>option to display the entire format file of an event, including the print
>fmt, which can be useful as well.
>
>Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
>---
> Documentation/trace-cmd/trace-cmd-list.1.txt |  5 ++-
> tracecmd/trace-list.c                        | 39 ++++++++++++--------
> tracecmd/trace-usage.c                       |  1 +
> 3 files changed, 28 insertions(+), 17 deletions(-)
>
>diff --git a/Documentation/trace-cmd/trace-cmd-list.1.txt b/Documentation/trace-cmd/trace-cmd-list.1.txt
>index 0ad62643..a5c6b16c 100644
>--- a/Documentation/trace-cmd/trace-cmd-list.1.txt
>+++ b/Documentation/trace-cmd/trace-cmd-list.1.txt
>@@ -26,7 +26,10 @@ OPTIONS
>     trace-cmd list -e '^sys.*'
>
> *-F*::
>-    Used with *-e* 'regex' to show those events formats.
>+    Used with *-e* 'regex' to show the fields of the event.
>+
>+*--full*::
>+    Used with *-F* which will show the "print fmt" of the event along with the fields.
>
> *-l*::
>     Used with *-e* 'regex' to show those events filters.
>diff --git a/tracecmd/trace-list.c b/tracecmd/trace-list.c
>index 4615b322..e292664e 100644
>--- a/tracecmd/trace-list.c
>+++ b/tracecmd/trace-list.c
>@@ -44,6 +44,7 @@ enum {
> 	SHOW_EVENT_FORMAT		= 1 << 0,
> 	SHOW_EVENT_FILTER		= 1 << 1,
> 	SHOW_EVENT_TRIGGER		= 1 << 2,
>+	SHOW_EVENT_FULL			= 1 << 3,
> };
>
>
>@@ -56,10 +57,10 @@ void show_file(const char *name)
> 	tracefs_put_tracing_file(path);
> }
>
>-typedef int (*process_file_func)(char *buf, int len);
>+typedef int (*process_file_func)(char *buf, int len, int flags);
>
> static void process_file_re(process_file_func func,
>-			    const char *name, const char *re)
>+			    const char *name, const char *re, int flags)
> {
> 	regex_t reg;
> 	char *path;
>@@ -84,7 +85,7 @@ static void process_file_re(process_file_func func,
> 		strcpy(&str[l-1], "\n*$");
>
> 	if (regcomp(&reg, str, REG_ICASE|REG_NOSUB))
>-		die("invalid function regex '%s'", re);
>+		die("invalid function regex '%s'", re, flags);

Shouldn't we add `flags` inside the fmt string?:
		die("invalid function regex '%s' with '%d' as flags", re, flags);

> 	free(str);
>
>@@ -97,7 +98,7 @@ static void process_file_re(process_file_func func,
> 	do {
> 		n = getline(&buf, &l, fp);
> 		if (n > 0 && regexec(&reg, buf, 0, NULL, 0) == 0)
>-			func(buf, n);
>+			func(buf, n, flags);
> 	} while (n > 0);
> 	free(buf);
> 	fclose(fp);
>@@ -105,14 +106,14 @@ static void process_file_re(process_file_func func,
> 	regfree(&reg);
> }
>
>-static int show_file_write(char *buf, int len)
>+static int show_file_write(char *buf, int len, int flags)
> {
> 	return fwrite(buf, 1, len, stdout);
> }
>
> static void show_file_re(const char *name, const char *re)
> {
>-	process_file_re(show_file_write, name, re);
>+	process_file_re(show_file_write, name, re, 0);
> }
>
> static char *get_event_file(const char *type, char *buf, int len)
>@@ -144,7 +145,7 @@ static char *get_event_file(const char *type, char *buf, int len)
> 	return file;
> }
>
>-static int event_filter_write(char *buf, int len)
>+static int event_filter_write(char *buf, int len, int flags)
> {
> 	char *file;
>
>@@ -161,7 +162,7 @@ static int event_filter_write(char *buf, int len)
> 	return 0;
> }
>
>-static int event_trigger_write(char *buf, int len)
>+static int event_trigger_write(char *buf, int len, int flags)
> {
> 	char *file;
>
>@@ -178,14 +179,17 @@ static int event_trigger_write(char *buf, int len)
> 	return 0;
> }
>
>-static int event_format_write(char *fbuf, int len)
>+static int event_format_write(char *fbuf, int len, int flags)
> {
> 	char *file = get_event_file("format", fbuf, len);
> 	char *buf = NULL;
> 	size_t l;
> 	FILE *fp;
>+	bool full;
> 	int n;
>
>+	full = flags & SHOW_EVENT_FULL;
>+
> 	/* The get_event_file() crops system in fbuf */
> 	printf("system: %s\n", fbuf);
>
>@@ -198,7 +202,7 @@ static int event_format_write(char *fbuf, int len)
> 	do {
> 		n = getline(&buf, &l, fp);
> 		if (n > 0) {
>-			if (strncmp(buf, "print fmt", 9) == 0)
>+			if (!full && strncmp(buf, "print fmt", 9) == 0)
> 				break;
> 			fwrite(buf, 1, n, stdout);
> 		}
>@@ -213,19 +217,19 @@ static int event_format_write(char *fbuf, int len)
>
> static void show_event_filter_re(const char *re)
> {
>-	process_file_re(event_filter_write, "available_events", re);
>+	process_file_re(event_filter_write, "available_events", re, 0);
> }
>
>
> static void show_event_trigger_re(const char *re)
> {
>-	process_file_re(event_trigger_write, "available_events", re);
>+	process_file_re(event_trigger_write, "available_events", re, 0);
> }
>
>
>-static void show_event_format_re(const char *re)
>+static void show_event_format_re(const char *re, int flags)
> {
>-	process_file_re(event_format_write, "available_events", re);
>+	process_file_re(event_format_write, "available_events", re, flags);
> }
>
>
>@@ -236,7 +240,7 @@ static void show_events(const char *eventre, int flags)
>
> 	if (eventre) {
> 		if (flags & SHOW_EVENT_FORMAT)
>-			show_event_format_re(eventre);
>+			show_event_format_re(eventre, flags);
>
> 		else if (flags & SHOW_EVENT_FILTER)
> 			show_event_filter_re(eventre);
>@@ -453,7 +457,6 @@ static void show_plugins(void)
> 	tep_free(pevent);
> }
>
>-
> void trace_list(int argc, char **argv)
> {
> 	int events = 0;
>@@ -536,6 +539,10 @@ void trace_list(int argc, char **argv)
> 					tracecmd_set_debug(true);
> 					break;
> 				}
>+				if (strcmp(argv[i], "--full") == 0) {
>+					flags |= SHOW_EVENT_FULL;
>+					break;
>+				}
> 				fprintf(stderr, "list: invalid option -- '%s'\n",
> 					argv[i]);
> 			default:
>diff --git a/tracecmd/trace-usage.c b/tracecmd/trace-usage.c
>index 3faa287b..567a91cb 100644
>--- a/tracecmd/trace-usage.c
>+++ b/tracecmd/trace-usage.c
>@@ -322,6 +322,7 @@ static struct usage_help usage_help[] = {
> 		" %s list [-e [regex]][-t][-o][-f [regex]]\n"
> 		"          -e list available events\n"
> 		"            -F show event format\n"
>+		"            --full show the print fmt with -F\n"
> 		"            -R show event triggers\n"
> 		"            -l show event filters\n"
> 		"          -t list available tracers\n"
>-- 
>2.29.2
>

---
Nicolas Sterchele

  reply	other threads:[~2021-04-23  0:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-16 18:17 [PATCH] trace-cmd list: Add --full to show print fmt of an event Steven Rostedt
2021-04-22 20:41 ` Nicolas Sterchele [this message]
2021-04-22 20:51   ` Steven Rostedt
2021-04-22 21:13     ` Steven Rostedt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YIHfki40RQf+J8/Y@hercule \
    --to=nicolas@sterchelen.net \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).