This patchset adds support for two new commands to our gdb scripts, which allow dynamically enabling and disabling tracing of events, like this:
(gdb) source scripts/qemu-gdb.py (gdb) qemu trace-enable translate_block Enabled trace event translate_block Breakpoint 1 at 0xb634f: file ../trace/generated-tracers.h, line 4734. (gdb) run [...] translate_block: tb:0x7fffc69ce010, pc:0x40000000, tb_code:0x7fffd39ce000 translate_block: tb:0x7fffc69ce078, pc:0x40010000, tb_code:0x7fffd39ce140 translate_block: tb:0x7fffc69ce0e0, pc:0x40010034, tb_code:0x7fffd39ce180 translate_block: tb:0x7fffc69ce148, pc:0x40013700, tb_code:0x7fffd39ce1d0 translate_block: tb:0x7fffc69ce1b0, pc:0x40013710, tb_code:0x7fffd39ce270 translate_block: tb:0x7fffc69ce218, pc:0x4001003c, tb_code:0x7fffd39ce310 [etc] This works by setting custom breakpoints on the stub functions trace_<eventname> that the null tracing backend creates. It probably doesn't work with an optimised build, but on the other hand because it's purely implemented within gdb you can use a tool like 'rr' (http://rr-project.org/) to record a run with no tracing enabled and then turn the tracing on and off as you desire during the replay. Patches one and two do some initial splitting of qemu-gdb.py into separate modules just to keep it from growing unhelpfully large. -- PMM Peter Maydell (3): scripts/qemu-gdb: Split MtreeCommand into its own module scripts/qemu-gdb: Split CoroutineCommand into its own file scripts/qemu-gdb: Add support for printing trace events scripts/qemu-gdb.py | 144 +++------------------------------ scripts/qemugdb/__init__.py | 28 +++++++ scripts/qemugdb/coroutine.py | 91 +++++++++++++++++++++ scripts/qemugdb/mtree.py | 82 +++++++++++++++++++ scripts/qemugdb/trace.py | 188 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 398 insertions(+), 135 deletions(-) create mode 100644 scripts/qemugdb/__init__.py create mode 100644 scripts/qemugdb/coroutine.py create mode 100644 scripts/qemugdb/mtree.py create mode 100644 scripts/qemugdb/trace.py -- 1.9.1