From 9531ebd65af362c7b4c5970080cd6b16812da741 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Tue, 21 Jul 2026 01:46:31 +0200 Subject: [PATCH] "when-end" command that gives the last event number of the recording --- src/DebuggerExtensionCommand.cc | 15 +++++++++++++++ src/test/when.py | 27 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/DebuggerExtensionCommand.cc b/src/DebuggerExtensionCommand.cc index 869d326ef3e..fa6ef1b03a0 100644 --- a/src/DebuggerExtensionCommand.cc +++ b/src/DebuggerExtensionCommand.cc @@ -80,6 +80,21 @@ static SimpleDebuggerExtensionCommand info_recording( return string("Path of recording: \"") + json_escape(trace_dir) + string("\""); }); +static SimpleDebuggerExtensionCommand when_end( + "when-end", "Print the number of the last rr event in the recording.", + [](GdbServer&, Task* t, const vector&) { + auto task = static_cast(t); + auto seek_reader(task->session().as_replay()->trace_reader()); + FrameTime time; + for (;;) { + auto result = seek_reader.read_task_event(&time); + if (result.type() == TraceTaskEvent::Type::NONE) { + break; + } + } + return string("Event at end of recording: ") + to_string(time); + }); + static std::vector back_stack; static ReplayTimeline::Mark current_history_cp; static std::vector forward_stack; diff --git a/src/test/when.py b/src/test/when.py index e37b6fd71be..47a47e234ec 100644 --- a/src/test/when.py +++ b/src/test/when.py @@ -1,6 +1,11 @@ from util import * import re +send_custom_command('when-end') +expect_debugger(re.compile(r'Event at end of recording: (\d+)')) +first_when_end_result = int(last_match().group(1)) +# Check this value after running the program for a bit. + send_custom_command('when') expect_debugger(re.compile(r'Completed event: (\d+)')) t = int(last_match().group(1)) @@ -43,6 +48,10 @@ if tid2 != tid: failed('ERROR ... tid changed') +send_custom_command('when-end') +expect_debugger(re.compile(r'Event at end of recording: (\d+)')) +second_when_end_result = int(last_match().group(1)) + # Ensure 'when' terminates a diversion expect_expression('(int)strlen("abcd")', 4) send_custom_command('when') @@ -65,4 +74,22 @@ if tid3 != tid2: failed('ERROR ... diversion changed tid') +stepi() + +send_custom_command('when-end') +expect_debugger(re.compile(r'Event at end of recording: (\d+)')) +final_when_end_result = int(last_match().group(1)) + +if first_when_end_result != second_when_end_result: + failed("ERROR ... first when-end result differs from second when-end result") +if second_when_end_result != final_when_end_result: + failed("ERROR ... second when-end result differs from final when-end result") + +if t >= first_when_end_result: + failed("ERROR ... First when result was after when-end") +if t3 >= first_when_end_result: + failed("ERROR ... Second when result was after when-end") +if t3 >= first_when_end_result: + failed("ERROR ... Third when result was after when-end") + ok()