trace: Add wildcard trace event support

A basic wildcard matching is supported in both the monitor command
"trace-event" and the events list file. That means you can enable/disable
the events having a common prefix in a batch. For example, virtio-blk trace
events could be enabled using:
    trace-event virtio_blk_* on

Signed-off-by: Mark Wu <wudxw@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
This commit is contained in:
Mark Wu 2011-10-31 11:29:04 +08:00 committed by Stefan Hajnoczi
parent ff74c5a9a9
commit 454e202d52
3 changed files with 40 additions and 3 deletions

View File

@ -132,12 +132,19 @@ This functionality is also provided through monitor commands:
means disabled.
* trace-event NAME on|off
Enable/disable a given trace event.
Enable/disable a given trace event or a group of events having common prefix
through wildcard.
The "-trace events=<file>" command line argument can be used to enable the
events listed in <file> from the very beginning of the program. This file must
contain one event name per line.
A basic wildcard matching is supported in both the monitor command "trace
-event" and the events list file. That means you can enable/disable the events
having a common prefix in a batch. For example, virtio-blk trace events could
be enabled using:
trace-event virtio_blk_* on
== Trace backends ==
The "tracetool" script automates tedious trace event code generation and also

View File

@ -324,14 +324,29 @@ void trace_print_events(FILE *stream, fprintf_function stream_printf)
bool trace_event_set_state(const char *name, bool state)
{
unsigned int i;
unsigned int len;
bool wildcard = false;
bool matched = false;
len = strlen(name);
if (len > 0 && name[len - 1] == '*') {
wildcard = true;
len -= 1;
}
for (i = 0; i < NR_TRACE_EVENTS; i++) {
if (wildcard) {
if (!strncmp(trace_list[i].tp_name, name, len)) {
trace_list[i].state = state;
matched = true;
}
continue;
}
if (!strcmp(trace_list[i].tp_name, name)) {
trace_list[i].state = state;
return true;
}
}
return false;
return matched;
}
/* Helper function to create a thread with signals blocked. Use glib's

View File

@ -15,14 +15,29 @@ void trace_print_events(FILE *stream, fprintf_function stream_printf)
bool trace_event_set_state(const char *name, bool state)
{
unsigned int i;
unsigned int len;
bool wildcard = false;
bool matched = false;
len = strlen(name);
if (len > 0 && name[len - 1] == '*') {
wildcard = true;
len -= 1;
}
for (i = 0; i < NR_TRACE_EVENTS; i++) {
if (wildcard) {
if (!strncmp(trace_list[i].tp_name, name, len)) {
trace_list[i].state = state;
matched = true;
}
continue;
}
if (!strcmp(trace_list[i].tp_name, name)) {
trace_list[i].state = state;
return true;
}
}
return false;
return matched;
}
bool trace_backend_init(const char *events, const char *file)