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:
parent
ff74c5a9a9
commit
454e202d52
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user