GP-5265: Move schedule display from Threads to Listing tabs
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
@ -61,18 +61,16 @@
|
|||
|
||||
<H3><A name="goto_time"></A>Go To Time</H3>
|
||||
|
||||
<P>This action is available when a trace is active. It prompts for a <EM>time schedule</EM>.
|
||||
This is the same form as the notation in the sub-title of the <A href=
|
||||
"help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html">Threads</A> window. In many
|
||||
cases, it is simply the snapshot number, e.g., <CODE>3</CODE>, which will go to the snapshot
|
||||
with key 3. It may optionally include an emulation schedule. For example, <CODE>3:10</CODE>
|
||||
will use snapshot 3 for an emulator's initial state and step 10 machine instructions on
|
||||
snapshot 3's event thread. If the snapshot does not give an event thread, then the thread must
|
||||
be specified in the expression, e.g., <CODE>3:t1-10</CODE>. That expression will start at
|
||||
snapshot 3, get the thread with key 1, and step it 10 machine instructions. The stepping
|
||||
commands can be repeated any number of times, separated by semicolons, to step threads in a
|
||||
specified sequence. For example, <CODE>3:t1-10;t2-5</CODE> will do the same as before, then get
|
||||
thread 2 and step it 5 times.</P>
|
||||
<P>This action is available when a trace is active. It prompts for a <EM>time schedule</EM>. In
|
||||
many cases, it is simply the snapshot number, e.g., <CODE>3</CODE>, which will go to the
|
||||
snapshot with key 3. It may optionally include an emulation schedule. For example,
|
||||
<CODE>3:10</CODE> will use snapshot 3 for an emulator's initial state and step 10 machine
|
||||
instructions on snapshot 3's event thread. If the snapshot does not give an event thread, then
|
||||
the thread must be specified in the expression, e.g., <CODE>3:t1-10</CODE>. That expression
|
||||
will start at snapshot 3, get the thread with key 1, and step it 10 machine instructions. The
|
||||
stepping commands can be repeated any number of times, separated by semicolons, to step threads
|
||||
in a specified sequence. For example, <CODE>3:t1-10;t2-5</CODE> will do the same as before,
|
||||
then get thread 2 and step it 5 times.</P>
|
||||
|
||||
<P>The emulator's state can also be patched by the schedule. Instead of specifying the number
|
||||
of steps, write a <EM>Sleigh</EM> statement, e.g., <CODE>3:t1-{r0=0x1234};10</CODE>. This will
|
||||
|
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
@ -165,7 +165,6 @@ public class DebuggerThreadsProvider extends ComponentProviderAdapter {
|
|||
|
||||
forSnapsListener.setTrace(coordinates.getTrace());
|
||||
|
||||
setSubTitle(coordinates.getTime().toString());
|
||||
contextChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -25,11 +25,11 @@ import ghidra.app.plugin.core.debug.event.*;
|
|||
import ghidra.app.plugin.core.debug.gui.DebuggerResources;
|
||||
import ghidra.app.plugin.core.debug.gui.DebuggerResources.*;
|
||||
import ghidra.app.plugin.core.debug.gui.thread.DebuggerTraceFileActionContext;
|
||||
import ghidra.app.plugin.core.progmgr.MultiTabPlugin;
|
||||
import ghidra.app.services.DebuggerTargetService;
|
||||
import ghidra.app.services.DebuggerTraceManagerService;
|
||||
import ghidra.debug.api.target.Target;
|
||||
import ghidra.debug.api.target.TargetPublicationListener;
|
||||
import ghidra.debug.api.tracemgr.DebuggerCoordinates;
|
||||
import ghidra.framework.model.*;
|
||||
import ghidra.framework.plugintool.*;
|
||||
import ghidra.framework.plugintool.annotation.AutoServiceConsumed;
|
||||
|
@ -117,7 +117,17 @@ public class DebuggerTraceTabPanel extends GTabPanel<Trace>
|
|||
}
|
||||
|
||||
private String getNameForTrace(Trace trace) {
|
||||
return DomainObjectDisplayUtils.getTabText(trace);
|
||||
String name = DomainObjectDisplayUtils.getTabText(trace);
|
||||
DebuggerCoordinates current = traceManager.getCurrentFor(trace);
|
||||
if (current == DebuggerCoordinates.NOWHERE) {
|
||||
// TODO: Could use view's snap and time table's schedule
|
||||
return name + " (?)";
|
||||
}
|
||||
String schedule = current.getTime().toString();
|
||||
if (schedule.length() > 15) {
|
||||
schedule = "..." + schedule.substring(schedule.length() - 12);
|
||||
}
|
||||
return name + " (" + schedule + ")";
|
||||
}
|
||||
|
||||
private Icon getIconForTrace(Trace trace) {
|
||||
|
@ -179,6 +189,7 @@ public class DebuggerTraceTabPanel extends GTabPanel<Trace>
|
|||
Trace trace = evt.getActiveCoordinates().getTrace();
|
||||
try (Suppression supp = cbCoordinateActivation.suppress(null)) {
|
||||
selectTab(trace);
|
||||
refreshTab(trace);
|
||||
}
|
||||
}
|
||||
else if (event instanceof TraceClosedPluginEvent evt) {
|
||||
|
|
|
@ -309,6 +309,7 @@ public class TutorialDebuggerScreenShots extends GhidraScreenShotGenerator
|
|||
public void testGettingStarted_DisassemblyAfterLaunch() throws Throwable {
|
||||
launchProgramInGdb();
|
||||
|
||||
Thread.sleep(7000);
|
||||
captureToolWindow(1920, 1080);
|
||||
}
|
||||
|
||||
|
@ -354,7 +355,7 @@ public class TutorialDebuggerScreenShots extends GhidraScreenShotGenerator
|
|||
launchProgramInGdb();
|
||||
placeBreakpointsSRandRand();
|
||||
|
||||
tool.setSize(1920, 1080);
|
||||
runSwing(() -> tool.setSize(1920, 1080));
|
||||
captureProvider(DebuggerBreakpointsProvider.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -238,16 +238,16 @@ snapshot, Ghidra will read that variable from the live target, capture
|
|||
it, and provide its value to the emulator.</p>
|
||||
<section id="stepping-schedules" class="level3">
|
||||
<h3>Stepping Schedules</h3>
|
||||
<p>If you had not noticed before, the subtitle of the Threads window
|
||||
gives the current snapshot number. If you have stepped in the emulator,
|
||||
it will also contain the sequence of steps emulated. Recall the
|
||||
<em>time</em> element of the Debugger’s <em>coordinates</em>. (See the
|
||||
<a href="A5-Navigation.html">Navigation</a> module if you need a
|
||||
<p>If you had not noticed before, the trace tabs include the current
|
||||
snapshot number. If you have stepped in the emulator, it will also
|
||||
contain the sequence of steps emulated. Recall the <em>time</em> element
|
||||
of the Debugger’s <em>coordinates</em>. (See the <a
|
||||
href="A5-Navigation.html">Navigation</a> module if you need a
|
||||
refresher.) The time element, called the <em>schedule</em>, consists of
|
||||
both the current snapshot and the sequence of steps to emulate. The
|
||||
subtitle displays that schedule. If you have done any patching of the
|
||||
emulator’s state, you may notice some more complicated “steps” in the
|
||||
schedule. The syntax is:</p>
|
||||
both the current snapshot and the sequence of steps to emulate. The tab
|
||||
displays that schedule. If you have done any patching of the emulator’s
|
||||
state, you may notice some more complicated “steps” in the schedule. The
|
||||
syntax is:</p>
|
||||
<ul>
|
||||
<li><em>Schedule</em> → <em>Snapshot</em> [ <code>:</code> [
|
||||
<em>Step</em> ( <code>;</code> <em>Step</em> ) * ] [ <code>.</code>
|
||||
|
|
|
@ -73,12 +73,12 @@ If the emulated target reads a variable that Ghidra has not yet captured into th
|
|||
|
||||
### Stepping Schedules
|
||||
|
||||
If you had not noticed before, the subtitle of the Threads window gives the current snapshot number.
|
||||
If you had not noticed before, the trace tabs include the current snapshot number.
|
||||
If you have stepped in the emulator, it will also contain the sequence of steps emulated.
|
||||
Recall the *time* element of the Debugger's *coordinates*.
|
||||
(See the [Navigation](A5-Navigation.md) module if you need a refresher.)
|
||||
The time element, called the *schedule*, consists of both the current snapshot and the sequence of steps to emulate.
|
||||
The subtitle displays that schedule.
|
||||
The tab displays that schedule.
|
||||
If you have done any patching of the emulator's state, you may notice some more complicated "steps" in the schedule.
|
||||
The syntax is:
|
||||
|
||||
|
|
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 202 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 32 KiB |