It would be convinient to enable tracepoints in qemu-io binary. This would allow to perform investigations without additional code recompilations.
The command line will be exactly the same as in qemu-system. Signed-off-by: Denis V. Lunev <d...@openvz.org> CC: Kevin Wolf <kw...@redhat.com> CC: Paolo Bonzini <pbonz...@redhat.com> --- qemu-io.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/qemu-io.c b/qemu-io.c index 5ef3ef7..2d0d2b0 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -18,6 +18,7 @@ #include "qemu/option.h" #include "qemu/config-file.h" #include "qemu/readline.h" +#include "qemu/log.h" #include "qapi/qmp/qstring.h" #include "qom/object_interfaces.h" #include "sysemu/block-backend.h" @@ -419,6 +420,25 @@ static QemuOptsList qemu_object_opts = { }, }; +static QemuOptsList qemu_trace_opts = { + .name = "trace", + .implied_opt_name = "enable", + .head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head), + .desc = { + { + .name = "enable", + .type = QEMU_OPT_STRING, + }, + { + .name = "events", + .type = QEMU_OPT_STRING, + },{ + .name = "file", + .type = QEMU_OPT_STRING, + }, + { /* end of list */ } + }, +}; static QemuOptsList file_opts = { .name = "file", @@ -473,6 +493,7 @@ int main(int argc, char **argv) module_call_init(MODULE_INIT_QOM); qemu_add_opts(&qemu_object_opts); + qemu_add_opts(&qemu_trace_opts); bdrv_init(); while ((c = getopt_long(argc, argv, sopt, lopt, &opt_index)) != -1) { @@ -512,10 +533,32 @@ int main(int argc, char **argv) } break; case 'T': + { + QemuOpts *trace_opts; + char *trace_file; + + trace_opts = qemu_opts_parse_noisily(qemu_find_opts("trace"), + optarg, true); + if (trace_opts == NULL) { + exit(1); + } + if (qemu_opt_get(trace_opts, "enable")) { + trace_enable_events(qemu_opt_get(trace_opts, "enable")); + } + trace_init_events(qemu_opt_get(trace_opts, "events")); + + trace_file = g_strdup(qemu_opt_get(trace_opts, "file")); + qemu_opts_del(trace_opts); + if (!trace_init_backends()) { exit(1); /* error message will have been printed */ } + trace_init_file(trace_file); + g_free(trace_file); + + qemu_set_log(LOG_TRACE); break; + } case 'V': printf("%s version %s\n", progname, QEMU_VERSION); exit(0); -- 2.5.0