From de437c2ad5f8356fb3d8acb493093d0d44dc796f Mon Sep 17 00:00:00 2001 From: d-millar <33498836+d-millar@users.noreply.github.com> Date: Fri, 4 Jun 2021 16:09:35 -0400 Subject: [PATCH] GP-983: Updated Debugger Help --- Ghidra/Debug/Debugger/certification.manifest | 1 + .../help/help/topics/Debugger/Debugger.html | 2 +- .../help/topics/Debugger/GettingStarted.html | 143 +++++++-------- .../help/topics/Debugger/Troubleshooting.html | 103 +++++++++-- .../topics/DebuggerBots/DebuggerBots.html | 2 +- .../DebuggerBreakpointMarkerPlugin.html | 15 +- .../DebuggerBreakpointsPlugin.html | 39 +++-- .../images/DebuggerBreakpointsPlugin.png | Bin 27786 -> 28208 bytes .../images/breakpoints-make-effective.png | Bin 0 -> 381 bytes .../DebuggerConsolePlugin.html | 6 +- .../DebuggerInterpreterPlugin.html | 4 +- .../DebuggerListingPlugin.html | 35 ++-- .../DebuggerMemviewPlugin.html | 20 +-- .../DebuggerModelServicePlugin.html | 25 +-- .../DebuggerModulesPlugin.html | 20 ++- .../images/DebuggerModulesPlugin.png | Bin 29396 -> 28629 bytes .../DebuggerObjectsPlugin.html | 165 +++++++++--------- .../DebuggerPcodeStepperPlugin.html | 25 ++- .../DebuggerRegistersPlugin.html | 4 +- .../DebuggerStackPlugin.html | 18 +- .../DebuggerStaticMappingPlugin.html | 11 +- .../images/DebuggerStaticMappingPlugin.png | Bin 16921 -> 16779 bytes .../DebuggerTargetsPlugin.html | 37 ++-- .../images/DebuggerTargetsPlugin.png | Bin 8595 -> 9174 bytes .../DebuggerThreadsPlugin.html | 77 ++++---- .../images/DebuggerThreadsPlugin.png | Bin 21581 -> 22293 bytes .../DebuggerTimePlugin.html | 23 +-- .../DebuggerTraceManagerServicePlugin.html | 17 +- .../DebuggerWatchesPlugin.html | 37 ++-- .../core/debug/gui/DebuggerResources.java | 20 ++- .../gui/objects/DebuggerObjectsProvider.java | 6 +- .../DebuggerTargetsPluginScreenShots.java | 4 +- .../DebuggerThreadsPluginScreenShots.java | 9 +- 33 files changed, 486 insertions(+), 382 deletions(-) create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-make-effective.png diff --git a/Ghidra/Debug/Debugger/certification.manifest b/Ghidra/Debug/Debugger/certification.manifest index 21cd0f0421..6ece02c2da 100644 --- a/Ghidra/Debug/Debugger/certification.manifest +++ b/Ghidra/Debug/Debugger/certification.manifest @@ -38,6 +38,7 @@ src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-mixed-ed.p src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-clear-all.png||GHIDRA||||END| src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-disable-all.png||GHIDRA||||END| src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-enable-all.png||GHIDRA||||END| +src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-make-effective.png||GHIDRA||||END| src/main/help/help/topics/DebuggerConsolePlugin/DebuggerConsolePlugin.html||GHIDRA||||END| src/main/help/help/topics/DebuggerConsolePlugin/images/DebuggerConsolePlugin.png||GHIDRA||||END| src/main/help/help/topics/DebuggerInterpreterPlugin/DebuggerInterpreterPlugin.html||GHIDRA||||END| diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Debugger.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Debugger.html index 2136146bb1..fe333d4192 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Debugger.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Debugger.html @@ -26,7 +26,7 @@ user. The user can rewind this recording at any point and the UI will recall those observations, displaying the recorded machine state instead of the present machine state. These traces can also be saved, loaded, and analyzed after a target has terminated or been - disconnected. Furthermore, they can be commited to a Ghidra Server for sharing and revision + disconnected. Furthermore, they can be committed to a Ghidra Server for sharing and revision control; however, conflicting changes cannot be merged.

A system of mappings, which is usually populated automatically, tracks the relationship of diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/GettingStarted.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/GettingStarted.html index 01910a582a..9509347486 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/GettingStarted.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/GettingStarted.html @@ -13,36 +13,28 @@

Debugger: Getting Started

-

During this testing phase, you will likely encounter many bugs, which is why these features - are not yet included in our binary release. As is, the debugger is poised to support debugging - native user-mode applications for Windows and Linux on 64-bit x86. This is accomplished by - "connecting" to the respective debugger for each platform: MS dbgeng.dll on Windows, and GDB/MI - on Linux. A variety of configurations are possible, and we are already developing more - connectors, but native desktop applications are the target for this initial roll-out. See the - Developer's Guide if you would like to contribute.

+

The debugger is poised to support debugging native user-mode applications for Windows and + Linux on 64-bit x86. This is accomplished by "connecting" to the respective debugger for each + platform: MS dbgeng.dll on Windows, and GDB/MI on Linux. A variety of configurations are + possible, and we are already developing more connectors, but native desktop applications are + the target for this release.

Pay Attention to Errors

-

There's still quite a bit of polish to get right, which is why this release is currently - source only. One of those areas deals with error handling and error reporting. Many actions are - taken automatically on behalf of the user, e.g., reading registers when a target is paused. In - most cases, errors on automatic actions are dropped to the console, as displaying them could - become a pest. That said, if things don't seem right, please check the Eclipse console for log - messages.

+

Many actions are taken automatically on behalf of the user, e.g., reading registers when a + target is paused. In most cases, errors on automatic actions are dropped to the Debug Console, + as displaying them in a dialog could become a pest. That said, if things still don't seem + right, please check the application log messages.

Launching a Target

Starting up the Ghidra Debugger for the simplest use case, user-mode debugging of a local - process, entails four steps:

+ process, entails two steps:

    -
  1. Load the default Debugger tool
  2. +
  3. Open (or import) your program into the Debugger tool
  4. -
  5. Launch the tool and populate it with the executable you want to debug
  6. - -
  7. Start the agent
  8. - -
  9. Start the target process
  10. +
  11. Click the "Debug" button ("bug" icon) in the main toolbar

To load the default Debugger tool, from the main Ghidra application window select

To launch the tool, you have several options, identical to those you might use to launch the - CodeBrowser tool. You can double-click the Debugger icon to launch an empty Debugger tool. You - can drag a program that you have already imported from the Active Project window onto the tool - icon in the Tool Chest, or you can right-click on one of the project programs and pick Open With → Debugger. If you open an empty Debugger tool, you can add + CodeBrowser tool. You can click the Debugger icon to launch an empty Debugger tool. You can + drag a program that you have already imported from the Active Project window onto the tool icon + in the Tool Chest, or you can right-click on one of the project programs and pick Open With → Debugger. If you open an empty Debugger tool, you can add programs to it later in the usual ways, e.g. via File → Import File... or by dragging-and-dropping programs onto the running tool.

@@ -65,35 +57,41 @@ should already be selected. Choosing "Configure All Plugins" (the plug icon near the top right), should show the full list of pre-selected plugins. Debugger-related plugins all begin with "Debugger". At a bare minimum, you will need the "DebuggerTargetsPlugin" and the - "DebuggerObjectsPlugin", and the plugins on which they depend (DebuggerInterpreterPlugin, - DebuggerModelServiceProxyPlugin, DebuggerTraceMangerServicePlugin).

+ "DebuggerObjectsPlugin", and the plugins on which they depend.

-

Steps 3 and 4 can be initiated together by hitting the bug icon in the main tool bar - entitled "Debug /path/to/my_program". For this to work, you must (a) have the program you wish - to run visible and selected in the static Listing window, and (b) have imported the program - from the place it lives on the local system. In other words, the file path associated with the - program should be the path to the executable for the current file system. You can verify this - using the Help → About my_program menu item in the main tool - bar. For example, on a Linux system, if you've imported "xclock", Help - → About xclock... should have an entry at the bottom of the page for "Executable - Location: /usr/bin/xclock".

+

For the "Debug" button to work, you must (a) have the program you wish to run visible and + selected in the static Listing window, and (b) have imported the program from the place it + lives on the local system. In other words, the file path associated with the program should be + the path to the executable for the current file system. You can verify this using the Help → About my_program menu item in the main tool bar. For example, + on a Linux system, if you've imported "xclock", Help → About + xclock... should have an entry at the bottom of the page for "Executable Location: + /usr/bin/xclock".

+ +

Alternative launch options may be available using the dropdown next to the "Debug" button. + Furthermore, to access additional configuration options, use the Debugger + → Debug program → ... menu options. The options selected here are saved and + applied for later launches, whether from the button or the menu.

When you launch the target by this method, a number of changes should be evident in the GUI. - A blank "Agent" window should appear, indicating the agent status and connection port. An - interpreter console will appear, potentially including various information about the launch. A - connection will be added to the Targets window. A new - tree-structure will be populated within the Targets window. A new tree + structure will be populated within the Objects window. The - remaining windows will be populated with current trace information.

+ remaining windows will be populated with current trace information. Please be patient, on some + platforms it may still take some time for things to populate and settle. The Debug Console + should provide some hints as to ongoing activity.

Debugger Components

-

Each of these pieces require some explanation.

+

Some of the more commonly-access components are explained below. Many also have their own + help pages.

Debugging Agent

-

The "agent" is a process running on the local system, which acts as the mediator between the +

An "agent" is a process running on the local system, which acts as a mediator between the Ghidra GUI and the native debugger. For systems such as Linux that support GDB, the agent wraps the native GDB functionality via a Java container that implements the GDB machine interface (GDB/MI). For Windows, the agent wraps the native dbgeng.dll functionality in a similar @@ -101,38 +99,38 @@ agent dies or is killed, the debugging session will be terminated. Of particular note, the protocol used to communicate between the GUI and the agent is the Ghidra Asynchronous Debug Protocol (GADP). It is not the native protocol associated with the debugger. Direct - communications with a native target are not currently supported, although that functionality - may be added in the future.

+ communication with a native target is not currently supported, although that functionality may + be added in the future. If you choose an IN-VM connector, Ghidra will access the native + debugger directly, so no agent window will appear. This may be faster, but it also introduces + the risk of crashing Ghidra and losing data.

Interpreter

The interpreter window allows a user command-line access to the native debugger. For Linux, this means the standard GDB command line interface; for Windows, the WinDbg/kd command set. While basic tasks may not require using the command line interface, more complicated debugging - scenarios invariably require commands specific to the target which cannot or have not been + scenarios invariably require commands specific to the target which have not or cannot be implemented generically in the GUI.

Targets / Connections

-

The "Debugger Targets" window adds an entry for every new GUI-to-agent connection. These may - be added directly from this window using the "Connect" button. This allows the user to select +

The "Debugger Targets" window adds an entry for every new debugger connection. These may be + added directly from this window using the "Connect" button. This allows the user to select non-default connection options and/or to initiate a connection without launching or attaching - to a target. For Linux, the default connection is equivalent to the menu choice, "GNU gdb local - agent via GADP/TCP". For Windows, the default is "MS dbgeng.dll (WinDbg) local agent via - GADP/TCP". Using this method of starting a connection requires the additional step of launching - or attaching to a specific target.

+ to a target. Using this method of starting a connection requires the additional step of + launching or attaching to a specific target.

Objects

-

To launch or attach to a target without using the tool-bar "Debug" option, you will need to - use the "Objects" window. The "Objects" window provides a default tree-structured list of - everything the debugger knows about the target. On its tool bar are buttons for "Quick Launch', - "Launch", and "Attach". "Quick Launch", like the "Debug" button on the main tool bar, runs the - executable associated with the active program in the Listing view. "Launch" allows you to - specify a target and its parameters, typically, in the form of a command line. This target can - be any executable on the system and need not be associated with an imported program. The - "Attach" button populates a list with potential targets from the running process list for the - system, which the user may select and attach to.

+

To launch or attach to a target without using the "Debug" button, you will need to use the + "Objects" window. The "Objects" window provides a default tree-structured list of everything + the debugger knows about the target. On its tool bar are buttons for "Quick Launch', "Launch", + and "Attach". "Quick Launch", like the "Debug" button on the main tool bar, runs the executable + associated with the active program in the Listing view. "Launch" allows you to specify a target + and its parameters, typically, in the form of a command line. This target can be any executable + on the system and need not be associated with an imported program. The "Attach" button + populates a list with potential targets from the running process list for the system, which the + user may select and attach to.

Traces and Threads

@@ -146,20 +144,25 @@ empty. If the current position (indicated by the draggable caret at the top of the right display) lies outside the bounds of the current trace, all of the remaining windows will be empty. Selecting a thread and a position causes the trace-based windows to display information - for that thread and time tick.

+ for that thread and time. From this window, the "step" buttons can be used to simulate target + execution to some extent.

Commands / Miscellany

The control buttons in the Objects window or commands issued in the Interpreter cause the target to advance in the usual ways. (The control buttons in the Thread window, by contrast, cause the trace to move forward or backward without affecting the target.) Breakpoints can be - set from either the "Breakpoints" window or the listing. Breakpoints are typically aggregated - by target. The "Registers" and "Stack" display, on the other hand, reflect the selected thread - from the "Threads" window. Typically, the thread selected for the trace in the Threads display - is kept in sync with the active thread for the debugger selected in the Objects view, but this - need not be the case. Similarly, the "Dynamic Listing", marked RIP or RSP in most case, shows - the bytes from the target's actual memory and may or may not match the bytes from the imported - executable in the primary "Listing". When it can, the Ghidra debugger attempts to keep the - Static and Dynamic Listings synchronized.

+ set from either the "Breakpoints" window or the listing. The "Registers" and "Stack" display + reflect the state of the selected thread from the "Threads" window. Typically, the thread + selected for the trace in the Threads display is kept in sync with the active thread for the + debugger selected in the Objects view, but this need not be the case. Similarly, the "Dynamic + Listing" shows the bytes from the target's actual memory, which may or may not match the bytes + from the imported executable in the primary "Listing". When it can, the Ghidra debugger keeps + the Static and Dynamic Listings synchronized.

+ +

Console

+ +

This console is a central place for reporting activity, errors, and suggesting actions. This + is the first place to look when troubleshooting.

diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Troubleshooting.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Troubleshooting.html index 0ed4ff62bc..d1c4332bf6 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Troubleshooting.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/Debugger/Troubleshooting.html @@ -13,13 +13,17 @@

Debugger: Troubleshooting

+

Often, it's a good idea to troubleshoot starting with your platform's native debugger. If it + doesn't work there, it's not likely to work in Ghidra, since it relies on that debugger. For + Linux, this is GDB; for Windows, this is WinDbg.

+

Error Console

The first place to look when you're having trouble is the Debug Console. Second, if you're - in Eclipse, you can check its "Console" window. Often, Ghidra's Debug Console will offer - actions to help you resolve a well-known issue or configuration problem. It also duplicates the - error log, when those messages are emitted from a debugger-related class. These typically offer - clues to exactly what has gone wrong.

+ running from Eclipse, you can check its "Console" window. Often, Ghidra's Debug Console will + offer actions to help you resolve a well-known issue or configuration problem. It also + duplicates the error log when those messages are emitted from a debugger-related component. + These typically offer clues to exactly what has gone wrong.

Settings and Toggles

@@ -50,7 +54,7 @@ trigger the trace. If auto-record is toggled off, you'll need to hit "Record (R)" with the process selected to start a trace. -
  • "Subscribe to..." causes a particular obejct to be tracked by the trace. Processes, +
  • "Subscribe to..." causes a particular object to be tracked by the trace. Processes, threads, registers, memory, stack, and so forth are tracked automatically, but you may wish to add other objects ad hoc.
  • @@ -58,24 +62,74 @@

    In the Threads provider:

    +

    In the Debugger menu:

    + + + +

    Frequently Asked Questions / Common Problems

    + +

    I Can't Launch the Current Program

    + +

    This happens when the local launchers cannot locate the original executable from which the + current program was imported. Furthermore, if the user account under which Ghidra is running + does not have permission to execute the original executable, the local launchers will not make + offers to execute it. First, use Help → About [program] to check + the path of the executable. If it was imported from an older version of Ghidra, it may not be + correctly recorded. Verify that the file exists on the local system and can be executed. You + may need to close and re-open the program database or just switch program tabs back and forth + to get the launchers to re-assess their offers.

    + +

    I Can't Launch With GDB

    + +

    Ghidra does not come packaged with any 3rd-party debuggers. It relies on what is already + available on the local system. If you're trying to debug on Linux, and you only see the "GDB + over SSH" launcher, it's likely because the local launchers could not find your copy of GDB. + Either you don't have one installed, or it's not in its usual place. First verify GDB is + installed and that you can run it from your shell's command line. We recommend version 8 or + better. Second, click the "Connect" button in the "Targets" window, select the desired GDB + connector and configure GDB's path appropriately. Then, click "Connect" and verify the + connection is created successfully. You should now be able to use the "Quick Launch" button in + the "Objects" window to launch the current program. Furthermore, the now-configured connector + should make offers in the "Debug Program" menu and the "Debug" drop-down button.

    + +

    If you're trying to debug using GDB on Windows, please consider using WinDbg (dbgeng.dll) + instead. If you insist on GDB, then there is a workaround, but it may take some work. We have + not yet implemented a pseudo-terminal wrapper for Windows, which is needed to communicate with + GDB/MI and support interrupts. The work-around is to use the "GDB over SSH" connector, but + you'll need to install an SSH server for Windows. There are a variety of options, including + WSL, Cygwin, and MSYS.

    + +

    I Can't Connect to GDB Over SSH

    + +

    First, verify that you can SSH into the target system and execute GDB via your shell's + command line. If that works, but Ghidra still can't connect, then it's likely an issue with + allowed / supported key exchange algorithms. Ghidra currently uses Ganymed SSH v262, which + (unfortunately) supports very few (likely outdated) algorithms, and those algorithms are + removed from the default SSH configuration of more recent Linux distributions. One solution is + to replace the Ganymed JAR file with a patched one. There is a "v263," which supports more + algorithms, but it is not available in Maven Central, and is not created by Ganymed's original + maintainers. A second solution is to change the target system's SSH configuration to allow the + older algorithms. At some point, we may convert our connector to use JSch instead, since it's + actively maintained.

    +

    My Breakpoints Aren't Working

    If your target is not breaking as expected, chances are the breakpoint has not actually been sent to the debugger. Breakpoints in the static listing are not necessarily effective for a target. Many things depend on tracing and module mapping to work correctly. Occasionally, either because of configuration options, or some other hiccup, these dependencies are not met. - Futhermore, Ghidra can only send breakpoints to a target while it is suspended. If you are + Furthermore, Ghidra can only send breakpoints to a target while it is suspended. If you are trying, for example, to break before "main", you must ensure Ghidra has a chance to place the breakpoint before the target would reach it. This may require using the command interpreter or changing your native debugger's options. Otherwise, verify that you are actually tracing the @@ -88,8 +142,20 @@ the case, right-click your target in the Objects window and select "Record". Please note that this action is enabled on any object, but is ignored if nothing - knows how to record it. Currently, only user-mode processes running on a 64-bit x86 system are - known to work well. Be sure you have selected the process, not a thread.

    + knows how to record it. Recorders typically examine the object and its environment (i.e., + debugger name, target operating system, architecture) to determine if and how to record it. Be + sure you have selected the process, not a thread.

    + +

    I Click Record, but I Get an Empty Dialog

    + +

    That dialog is meant to display a list of offers for recording the selected target. If it's + empty, it's because nothing knows how to record it. Most likely, this means the target + environment (arch, os, etc.) is not recognized. Rarely, this is an error in the connector, + which may incorrectly report the target environment. Less rarely, the native debugger requires + the user to manually specify the target platform. Most likely, the target environment is simply + not supported by Ghidra, yet. If Ghidra supports the target processor, this can usually be + resolved by coding up a new opinion, selecting the correct Ghidra language and compiler spec + (ABI) for the environment as reported by the debugger connection.

    My Modules are not Mapped in

    @@ -102,8 +168,7 @@ Modules window. Right-click the module where you expected to sync and select "Map Modules." If you do not see the program you expected, it may be because it is not named in a way that Ghidra would - recognize it as the given module. Currently, the program's name must contain (case insensitive) - the module's filename (ignoring the full path). A user action to remedy this is a known feature - gap.

    + recognize it as the given module. To force Ghidra to map a module to the current program, + select "Map Module to ...."

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBots/DebuggerBots.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBots/DebuggerBots.html index 4f2ccc7c65..c7e4d3751b 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBots/DebuggerBots.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBots/DebuggerBots.html @@ -13,7 +13,7 @@

    Debugger Bots: Workflow Automation

    -

    Bots a are pluggable part of the Debugger's Workflow plugin and provide useful automation, +

    Bots are a pluggable part of the Debugger's Workflow plugin and provide useful automation, taking actions on the user's behalf that would otherwise be tedious, or that should occur "under the hood." Each can be toggled from the Edit → Tool Options menu in Ghidra's Project window.

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html index b618f1ac4a..5b91cfbe78 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html @@ -48,9 +48,9 @@ cursor, this will prompt to set one, giving a reasonable set of default parameters based on the context at the cursor. At an instruction, it will prefer to set a Software Execution breakpoint. At defined data, it will prefer to set a Read/Write breakpoint of the size of data. - At undefined data, or if the target does not support the suggested default, an error dialog is - presented. Please use one of the Set Breakpoint actions to force specific commands. Please - beware: the default parameters are not always acceptable to the connected debugger.

    + At undefined data, or if the target does not support the suggested default, the default kind is + left unselected. Please use one of the Set Breakpoint actions to force specific commands. + Please beware: the default parameters are not always acceptable to the connected debugger.

    Set Breakpoint

    @@ -78,7 +78,7 @@ the instruction or data at the cursor.
  • Length - the length in bytes of the breakpoint. Some debuggers for some kinds of - breakpoints, may not allow a value other than 1. For execution breakpoints, this defaults to + breakpoints may not allow a value other than 1. For execution breakpoints, this defaults to 1; for access breakpoints, this defaults to the size of the data at the cursor.
  • Kinds - the kind(s) of breakpoint. Only the reasonable combinations are presented, but @@ -106,8 +106,9 @@

    Tool Options: Colors

    -

    The background coloring of enabled and disabled breakpoints can be configured in the tool's - options. By default, enabled breakpoints are colored a de-saturated red, while disabled - breakpoints have no background color at all.

    +

    The background coloring of enabled and disabled, effective and ineffective breakpoints can + be configured in the tool's options. By default, enabled breakpoints are colored a desaturated + red, ineffective breakpoints are colored grey, and disabled breakpoints have no background at + all.

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html index b26b6b1eeb..f8768e79c7 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html @@ -69,23 +69,21 @@
  • Enabled - displays an icon indicating the state of the breakpoint. Clicking the icon toggles the breakpoint.
  • -
  • -
  • Image - gives the name of the Ghidra program, if the breakpoint is mapped to one.
  • @@ -96,8 +94,8 @@
  • Length - usually 1. For access breakpoints, this notes the length in bytes of the address range.
  • -
  • Kinds - indicates the kind(s) of breakpoint: Software (execution), Execution (hardware), - Read (hardware), and/or Write (hardware).
  • +
  • Kinds - indicates the kind(s) of breakpoint: SW_EXECUTE, HW_EXECUTE, READ, and/or + WRITE.
  • Locations - counts the number of trace locations mapped to this logical breakpoint, applying the trace filter if active. Note that a logical breakpoint with 0 locations is @@ -155,7 +153,15 @@

    This action is always available. It disables every breakpoint. For any breakpoint that is already disabled, no action is taken.

    -

    Clear +

    Make Breakpoints Effective

    + +

    This action is available whenever there are mapped breakpoints with 0 locations, i.e., it + corresponds to a target location where the breakpoint is still missing. It places such + breakpoints where possible. This action is also offered as a resolution in the console. It + appears in the log any time this action is available.

    + +

    Clear Selected Breakpoints

    This action is available when one or more breakpoints or locations are selected. It clears @@ -164,7 +170,8 @@

    Clear All Breakpoints

    -

    This action is always available. Use with caution! It deletes every breakpoint.

    +

    This action is always available. Use with caution! It deletes every + breakpoint.

    Filter Actions

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png index b4e0ed428f9b20ae4af98df4a81da43619a9eb79..88f4df0a835a4d55558434c98f262cb8dd9c2a01 100644 GIT binary patch literal 28208 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 BT&(~A literal 27786 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%0D-`35>L~c8~cjauG?6 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 diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-make-effective.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-make-effective.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e1ab4ede499f1cfbdafd425a95c7924f5cffe9 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1TkdAc}; zSoAKPXzO>_L7;WN>2CIp%#0$oV&+{>7$)iz@=1B$zP0qItx%Q6Ly?oL8L{nVo2Fcg z;_Vfju)$tv{mrZAUR4`^elR~MUOfBl9f{98It(sLiqD0X#(ocM*jl!3YaRQic-N(E zg)-gCGW+Zt*bFS6Pj?lZDVcmLfc<8PUX8p<%1ovYUYe?b4IL$oeA^To*b2^tM!jYi zoEf`g{-?kDVh?lQPcCx^b>hEnxXnJTZnv$>t=)IuO?}PE&)4N{p~W<7PWZe}%UX=K zx#U|N5E2UF@CahKS0a)V%phv;=VRTe2bx?O3(Er-q#y9i5nYr2ppI2u@UuxR(;VqQ VafRAfuYjSz;OXk;vd$@?2>|(+jFbQX literal 0 HcmV?d00001 diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerConsolePlugin/DebuggerConsolePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerConsolePlugin/DebuggerConsolePlugin.html index 30e30a3393..6a3c212002 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerConsolePlugin/DebuggerConsolePlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerConsolePlugin/DebuggerConsolePlugin.html @@ -26,7 +26,7 @@ configuration, this can comprise a wide range of components, including all GUI views, active connectors, and running agents. Currently, it implements an appender to gather all Log4J messages emitted by Ghidra and filters for debugger-related packages and a level in the range - INFO through and including FATAL. That feature will likely be removed as more components are + INFO through FATAL, inclusive. That feature will likely be removed as more components are programmed to work directly with the console. Soon, it may also provide a command-line interface to control Ghidra's debugging sessions and interact with traces.

    @@ -64,5 +64,9 @@

    Clear

    Removes all messages, including actionable messages, from the log.

    + +

    Select None

    + +

    Resets the selection, usually so table scrolling can be restored to "normal."

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerInterpreterPlugin/DebuggerInterpreterPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerInterpreterPlugin/DebuggerInterpreterPlugin.html index 16706c488c..6b77c09cbd 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerInterpreterPlugin/DebuggerInterpreterPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerInterpreterPlugin/DebuggerInterpreterPlugin.html @@ -28,11 +28,11 @@

    Clear Interpreter

    -

    This action is always available. It clears the console's ouput buffer.

    +

    This action is always available. It clears the console's output buffer.

    Remove Interpreter

    -

    This action appears when the target's interpreter is not longer valid, i.e., the connection +

    This action appears when the target's interpreter is no longer valid, i.e., the connection was closed. It permanently closes the console. Note this action can only appear if this console was pinned.

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/DebuggerListingPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/DebuggerListingPlugin.html index 9769c18d68..372c54f55f 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/DebuggerListingPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/DebuggerListingPlugin.html @@ -25,10 +25,10 @@

    The dynamic listing is analogous to Ghidra's listing for static analysis, but in the dynamic context. That is, it displays memory contents from a target. More precisely, it displays recorded memory contents in a trace. In most use cases, that trace is - "at the present", meaning it is the most recent memory from a live target. Multiple listings + "at the present," meaning it is the most recent memory from a live target. Multiple listings can be displayed simultaneously, using the same pattern as many other Ghidra windows. The "primary" listing is always displayed and generally tracks with the rest of the tool. Any - listing can be "snapshotted", i.e., duplicated. This is where dynamic listings differ from + listing can be "snapshotted," i.e., duplicated. This is where dynamic listings differ from static listings. Static snapshots remain in place; they do not automatically navigate. Dynamic snapshots can still be configured to navigate, following the rest of the tool. A common use is to configure a "snapshot" to follow the stack pointer. Still, you can disable a listing's @@ -43,20 +43,20 @@ mark-up is added to the listing, it exists "from this time on". That is, its time interval is from the current time to infinity, i.e., it has been created but never destroyed. When mark-up is removed from the listing, its "destruction time" is set to just before the current time. If - this would cause the mark-up to "never exist", i.e., its destruction time is equal to its - creation time, then the record is deleted altogether. This yields a mostly-intuitive mechanism - for marking things up "in time," but the fact that mark-up is bound in time can still be + this would cause the mark-up to "never exist," i.e., its destruction time precedes its creation + time, then the record is deleted altogether. This yields a mostly-intuitive mechanism for + marking things up "in time," but the fact that mark-up is bound in time can still be surprising. For example, disassembling some instructions and then stepping back in time will cause that disassembly to disappear.

    Because not all memory is captured, some background coloring is used to indicate the state of attempted memory reads. Regardless of state, the most-recent contents, as recorded in the - trace, or 0s are displayed in the listing. "Stale" memory, that is ranges of memory which have - not been read at the current time, are displayed with a darker background. Where that memory is - marked "read-only" and has been successfully read previously, that coloring is subdued, since - the contents are unlikely to have changed. Where a read was attempted but failed, the range is - displayed with a pink background. Otherwise, up-to-date contents are displayed with the default - background color.

    + trace, are displayed in the listing, defaulting to 00. "Stale" memory, that is ranges of memory + which have not been read at the current time, are displayed with a darker background. Where + that memory is marked "read-only" and has been successfully read previously, that coloring is + subdued, since the contents are not likely to have changed. Where a read was attempted but + failed, the first address in the failed range is displayed with a pink background. Otherwise, + up-to-date contents are displayed with the default background color.

    Actions

    @@ -110,9 +110,9 @@

    This action is available whenever a trace is active in the listing. It prompts the user for an address, which can be expressed in Sleigh, then attempts to navigate to it. The expression - is evaluated in the context of the current thread and point in time. If the current trace is - live and at the present, the target may be queried to retrieve any machine state required to - evaluate the expression.

    + is evaluated in the context of the current thread, frame, and point in time. If the current + trace is live and at the present, the target may be queried to retrieve any machine state + required to evaluate the expression.

    @@ -135,6 +135,13 @@ static location, the listing logs a "missing module" to the console, offering either to import the module or map it to an existing program.

    +

    Open Program

    + +

    This action is offered as a resolution whenever a module cannot be automatically opened. + This typically happens when the module's program database has crash data that can be recovered + and/or needs a version upgrade. It will attempt to open the program, allowing Ghidra to prompt + you about the situation.

    +

    Capture Memory

    This action is available when the current trace is "at the present" with a live target, and diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerMemviewPlugin/DebuggerMemviewPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerMemviewPlugin/DebuggerMemviewPlugin.html index 9a678ad06c..4cfdc445b1 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerMemviewPlugin/DebuggerMemviewPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerMemviewPlugin/DebuggerMemviewPlugin.html @@ -17,13 +17,13 @@

    + "images/DebuggerMemviewPlugin.png">

    As in the Threads view, you may wish to follow the evolution of various objects over time. - The Debugger Memview Plugin provides a generic time vs. memory (or memory vs. time) plot of + The memory viewer window provides a generic time vs. address (or address vs. time) plot of objects marked as of interest. The plot may be populated from either a script, typically processing an entire trace, or updated on-the-fly from a live target trace. The objects are listed in the viewer's table on the left for the purpose of quick identification and sorting, @@ -37,7 +37,7 @@ corner to get an accurate tool tip. Points past the maximum time or address will not display values for that coordinate.

    -

    Memview Table

    +

    Table

    The table on the right provides the standard Ghidra table-style interface listing each object, its starting and ending times and starting and ending addresses, if available. Clicking @@ -46,14 +46,14 @@ corner of the corresponding object in the panel. Applying the filter will redisplay only the selected objects in the panel, if that option is enabled.

    -

    Memview Panel

    +

    Plot Panel

    The panel displays all of the object in the table or the table's selection, depending on the options enabled. Clicking on the panel will set the red arrow at that position and display the current position in the title. Doubling-clicking on object will cause it to be centered in the display. The size of the panel can be expanded or contracted on either axis with the Zoom buttons. The top left corner of the panel (which may or may not be visible depending on - scrolling) always corresponds to the first address and the first tick. Scroll bars are enabled + scrolling) always corresponds to the first address and the first snap. Scroll bars are enabled if any object lies outside the viewable portion of the panel. Drag&drop can also be used to position the panel view. Ctrl-drag&drop draws a box around a region of the display, and the enclosed objects are selected in the table.

    @@ -66,19 +66,19 @@

    Toggle Layout

    -

    The default panel view is time vs address. The toggle button serves as both the way to +

    The default panel view is time vs. address. The toggle button serves as both the way to switch views and to refresh the display.

    Toggle Process Trace

    -

    By default, as new objects are added to a debugger trace, they appear in the Memview table - and panel. The behavior can be toggled on or off at the user's discretion.

    +

    By default, as new objects are added to a debugger trace, they appear in the table and + panel. The behavior can be toggled on or off at the user's discretion.

    Toggle Apply Filter

    -

    This button determines whether the table filter affects the display panel. When toggled on, - only selected objects are displayed in the panel.

    +

    This button determines whether the table filter affects the plot panel. When toggled on, + only objects listed in the table are displayed in the plot.

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModelServicePlugin/DebuggerModelServicePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModelServicePlugin/DebuggerModelServicePlugin.html index e460687ad7..50fab05e66 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModelServicePlugin/DebuggerModelServicePlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModelServicePlugin/DebuggerModelServicePlugin.html @@ -27,17 +27,17 @@

    This group of actions is available whenever there exists a debug launcher that knows how to run the current program. Various launchers may all make offers to run the current program, each of which is presented as a item in this group. Not all offers are guaranteed to work. For - example, an offer to launch the program remotely via SSH depends on the host's availability and - the user's credentials. The offers are ordered by most recent activation. The most recent offer - used is the default one-click launcher for the current program. Each launcher may check various - conditions before making an offer. Most commonly, it will check that there is a suitable - debugger for the current program's architecture (language) on the local system, that the - program's original executable image still exists on disk, and that the user has permission to - execute it. A launcher may take any arbitrary action to run the program. Most commonly, it - starts a new connection suitable for the target, and then launches the program on that - connection. If Record - Automatically is enabled, this will provide a one-click action to debug the current + Automatically is enabled, this will provide a single-click action to debug the current program. This is similar to the Quick Launch action in the Commands and Objects window, except this one does not require an existing @@ -53,6 +53,9 @@

    Disconnect All

    This action is always available from the main application window. It closes all debugger - connections, no matter what tool created them. This is a sort of panic and reset action.

    + connections, no matter what tool created them. This is a sort of panic and reset action. NOTE: + A complete and total reset is not always possible. Some connectors may load native libraries + into Ghidra's JVM. Unless that connector is careful to reset that library's state, subsequent + connections could be affected.

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/DebuggerModulesPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/DebuggerModulesPlugin.html index 445e0c380b..dc7ae1517f 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/DebuggerModulesPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/DebuggerModulesPlugin.html @@ -23,13 +23,13 @@

    The concept of a module may vary from platform to platform, but in most cases, it refers to - a binary image which is loaded or mapped into memory. Likely, these are the same files that - Ghidra can import for static analysis. Similarly, the concept of a section may vary, but in - most cases, it refers to a portion of a module, possibly backed by its binary image. This - window displays information about modules, and sometimes their sections, known to the connected - debugger. Information in this window reflects what has been recorded into the current trace, - which in turn comes from a target. The top table displays module information, and the bottom - table displays section information.

    + a binary image which is loaded or mapped into memory comprising some portion of the target's + executable code. Likely, these are the same files that Ghidra can import for static analysis. + Similarly, the concept of a section may vary, but in most cases, it refers to a portion of a + module, possibly backed by its binary image. This window displays information about modules, + and sometimes their sections, known to the connected debugger. Information in this window + reflects what has been recorded into the current trace, which in turn comes from a target. The + top table displays module information, while the bottom table displays section information.

    Table Columns

    @@ -42,6 +42,8 @@
  • Max Address - if available, the maximum address where the module is mapped in the target's memory. Double-clicking this field navigates to the address.
  • +
  • Name - a short name for the module, typically its file name.
  • +
  • Module Name - the name of the module, ideally its full path on the target's filesystem.
  • @@ -147,12 +149,12 @@

    Import Missing Module

    -

    This action is offered to resolve a "Missing Module" console message. It is equivalent to This action is offered to resolve a "missing module" console message. It is equivalent to Import From File System on the missing module.

    Map Missing Module

    -

    This action is offered to resolve a "Missing Module" console message. It is equivalent to This action is offered to resolve a "missing module" console message. It is equivalent to Map Module To on the missing module.

    Filter Sections by Module

    diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/images/DebuggerModulesPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/images/DebuggerModulesPlugin.png index 21da4fa7ceae833adff4c3c5c40dfb49d4c3ce7b..c30378df45f8e3ca6fce46b939ac94b103bf3910 100644 GIT binary patch literal 28629 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 diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerObjectsPlugin/DebuggerObjectsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerObjectsPlugin/DebuggerObjectsPlugin.html index 5ee5a69921..0b4f4a538f 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerObjectsPlugin/DebuggerObjectsPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerObjectsPlugin/DebuggerObjectsPlugin.html @@ -21,8 +21,8 @@ -

    The Debugger's Objects window permits the user to interact directly with a connected - debugger and its targets. Along with the command-line, it is the primary mechanism for issuing +

    The Objects window permits the user to interact directly with a connected debugger and its + targets. Along with the command-line interpreter, it is the primary mechanism for issuing commands, e.g., step, to a target. Commands are accessible from the tool bar, the pull-down, and pop-up menus. Commands are enabled in two ways: (1) the object selected has a property that marks it as a logical target for that command, or (2) the object has an ancestor @@ -38,44 +38,34 @@

    The application of these special properties to each object to determine its behavior and relevant actions allows all objects to be treated generically. This feature has several powerful implications. All objects may be represented in many ways, and one representation may - easily be converted into another. The default representation is a tree, and the Debugger's - Objects plugin starts with a tree to represent a debugger session's state. Any portion of the - tree may be reproduced as its own subtree or as a table or as a graph using the Display as... actions. Any portion of display may - equally be exported or imported from the plugin. The generic aspect of all objects also allows + easily be converted into another. The default representation is a tree, and the Objects plugin + starts with a tree to represent a debugger session's state. Any portion of the tree may be + reproduced as its own subtree or as a table or as a graph using the Display as... actions. Any portion of the display + may be exported from or imported into the plugin. The generic aspect of all objects also allows the user to process them in scripts or plugins in common ways. For example, you could write a script to walk the entire tree and find objects with "File" in the name or with the value 0xDEADBEEF.

    The hierarchy reflected in the initial display has either been derived from the target, as - in the case of WinDbg v.2's dbgmodel engine, or imposed by the designers of the current - "model". The model is the schema chosen by the authors for a particular debugger target. It - usually mirrors to some extent the underlying relationships in the native debugger, but need - not, and is usually fixed for that target. (In the future, we intend to expose this schema and - allow it to be transformed by the user.) Commands executed within this plugin are passed from - the GUI through the model to the target manager and on to the agent which makes the required - native calls. In general, this plugin does not operate on any object in a trace or controlled - by a recorder, except for actions which initiate a recording or add objects to a recording.

    + is the case with WinDbg Preview's dbgmodel.dll engine, or imposed by the designers of the + current connector's "model." The model has a type schema chosen by the authors for a particular + debugger target. It usually mirrors to some extent the underlying relationships in the native + debugger, but need not, and is usually fixed for that target. Commands executed within this + plugin are passed from the GUI through the model, typically manifesting in native API calls, or + commands sent to a special interpreter of the debugger. This plugin does not operate on traces, + except for actions which initiate a recording.

    -

    Console

    - -

    Shows the console for the selected context, usually the debugger's command-line interpreter. - Some models may also present a target's standard I/O via a console.

    - -

    Target Management

    - -

    The following actions manage targets, e.g., processes, within a connected debugger.

    +

    Actions for Target Management

    Quick Launch

    -

    Launch a new target using the current program.

    - -

    This action is the fastest and probably most common way of starting a debugger target. The - action attempts to launch the program in the currently selected tab of the static listing - window. The success of the action depends on the program being associated with an existing - executable file on the local system. The value associated with the program may, of course, be - checked using the About Program File - function.

    +

    Launches a new target using the current program. This action is the fastest and probably + most common way of starting a debugger target on an existing connection. The action attempts to + launch the program in the currently selected tab of the static listing window. The success of + the action depends on the program being associated with an existing executable file on the + local system. The value associated with the program may, of course, be checked using the About Program File function.

    Launch

    @@ -87,7 +77,7 @@ for the platform.

    For example, the CommandLineLaunch version of the dialog for JDI targets displays a check - box for whether the target shuld be suspended on launch, the default quote character used by + box for whether the target should be suspended on launch, the default quote character used by the command line, the program used to start the virtual machine (java), the path to where it's installed, and fields for the name of the class and any user options you might supply:

    @@ -101,25 +91,23 @@

    The options displayed by the Launch command are, for some targets, connected to the - currently selected item under Connectors. For example, the Windows tree offers four possible - connectors: one for command-line launch, one for attach, open for kernel-mode debugging, and - one for opening previously-generated dump or trace files.

    + currently selected item under Connectors. For example, the dbgmodel.dll connector offers + several launchers: one for command-line launch, one for attach, open for kernel-mode debugging, + and one for opening previously-generated dump or TTD trace files.

    Attach

    -

    Attach to a running target

    - -

    If the debugger has available a list of running targets for the local system, the attach - action provides a convenient way to select and attach to an existing process. If the - highlighted object in the provider is considered "attachable", the attach action attempts to - connect that element. The list of "attachable" targets is typically displayed in the tree under - Session/Available. Bare in mind it often takes time to populate the Available - list, which may need to be manually refreshed.

    +

    Attach to a running target. If the debugger has available a list of running targets for the + local system, the attach action provides a convenient way to select and attach to an existing + process. If the highlighted object in the provider is considered "attachable", the attach + action attempts to connect that element. The list of "attachable" targets is typically + displayed in the tree under Session/Available. Bear in mind it often takes time to + populate the Available list, which may need to be manually refreshed.

    Detach

    -

    Detach from the selected target, usually allowing it to resume execution. (This action - terminates the current trace for the target, if applicable, but does not close it.)

    +

    Detach from the selected target, usually allowing it to resume execution. As a consequence, + this action terminates the trace for the current target, if applicable.

    Re-attach

    @@ -128,12 +116,10 @@

    Kill

    -

    Kill this current target. (As with detach, this terminates a current trace, if - applicable, but does not close it.)

    +

    Kill the current target. As a consequence, this action terminates the trace for the current + target, if applicable.

    -

    Execution Management

    - -

    The following actions manage execution state of a target.

    +

    Actions for Execution Management

    Interrupt (Pause, Suspend, Break)

    @@ -156,6 +142,10 @@

    Allow the current target to finish the current subroutine, pausing after.

    +

    Step Last / Extended

    + +

    Perform a target-defined step, often the last (possibly custom or extended) step.

    +

    Set Breakpoint

    @@ -170,15 +160,17 @@

    The given expression can follow any form accepted by the connected debugger, although most - often this will be an address. The listing can only set breakpoints on specific addresses, not - symbols or expressions. The listing is also not available until the target is being recorded. - For a recorded target, breakpoints can also be managed in the Breakpoints window or using the Breakpoint Marker actions from the disassembly listings.

    -

    Trace Management

    +

    Actions for Trace Management

    The following actions manage target tracing. Note that many other windows are not usable until a target is recorded into a trace.

    @@ -195,7 +187,7 @@

    Automatically record and open recognized targets. If Ghidra cannot uniquely identify the platform, it will select one by priority without prompting the user.

    -

    Display Management

    +

    Actions for Display Management

    The following actions can create additional displays of portions of the debugger model.

    @@ -216,15 +208,15 @@

    Display As Graph

    -

    Constructs and displays a graph from the selection and its visible descendants. (The graph - does not currently maintain synchronization.)

    +

    Constructs and displays a graph from the selection and its visible descendants. NOTE: The + graph does not currently maintain synchronization.

    Display As XML

    Encodes the selected object and its visible descendants in XML and prints the result to the - console. (Note: various characters not allowed in XML may be converted, typically to - underscores, in the result.)

    + console. NOTE: Various characters not allowed in XML may be converted, typically to + underscores, in the result.

    Display Filtered Tree

    @@ -255,45 +247,52 @@

    Displays a list of the methods available for the selection, which may be applied and combined in a filter.

    -

    Data Management

    - -

    The following actions can export and import model information.

    +

    Actions for Data Management

    Export as XML

    -

    Convert the selection and its visible descendants to XML and export the result to a file of - the user's choosing.

    +

    Converts the selection and its visible descendants to XML and exports the result to a file + of the user's choosing.

    Import from XML

    -

    Import "facts" from a file of the user's choosing and render it as a tree.

    +

    Imports "facts" from a file of the user's choosing and renders it as a tree.

    Export as Facts

    -

    Convert the selection and its visible descendants to "fact" files and export the result to a - directory of the user's choosing. (Currently, "fact" files itemize the path, name, value, type, - and children for each object.)

    +

    Converts the selection and its visible descendants to "fact" files and exports the result to + a directory of the user's choosing. Currently, "fact" files itemize the path, name, value, + type, and children for each object.

    Import from Facts

    -

    Import XML from a directory of the user's choosing and render them as a tree.

    +

    Imports XML from a directory of the user's choosing and renders them as a tree.

    Import from trace

    Import from trace is roughly equivalent to using the open dump/trace connector.

    -

    Miscellaneous

    +

    Miscellaneous Actions

    -

    The following actions are for maintenance or experiments

    +

    Console

    + +

    Shows the console for the selected context, usually the debugger's command-line interpreter. + Some models may also present a target's standard I/O via a console.

    Refresh Node

    Queries the model for the current object's children and rebuilds that portion of the display.

    +

    Toggle Base

    + +

    Asks the connector to display numeric values in decimal or hexadecimal. This may also cause + updates to the trace database, renaming objects whose names are derived from those numeric + values.

    +

    Subscribe / Unsubscribe to Selection

    Asks the recorder to include or exclude the current object from the trace.

    @@ -305,19 +304,18 @@ step action will only be enabled for objects marked steppable. If "selection only" is off, the debugger will walk the path up from the current object looking for an ancestor for which the action is enabled. For example, if threads are steppable and - contain registers as children, step will still be enabled for that thread if the current - selection is one of its registers.

    + contain registers as descendants, step will still be enabled for that thread if the + current selection is one of its registers.

    Hide Intrinsic Attributes

    -

    Toggle which objects are visible (mostly for diagnostic purposes). Attributes for each - object may be split into those that convey information intended for the user and those that - convey information for the debugger. The latter are not normally visible, because they just - clutter the display. However, under certain circumstances, the user may want to see them. For - example, the _update_mode attribute determines when node is refreshed, and the - _state attribute indicates whether a thread is running or stopped. In the latter case, - this information is reflected for the user in the display, but the invisible attribute actually - determines the behavior.

    +

    Toggle whether hidden objects are visible — mostly for diagnostic purposes. Some + attributes convey information intended for the user and some convey information for the + machine. The latter are not normally visible, because they just clutter the display. However, + under certain circumstances, the user may want to see them. For example, the _state + attribute indicates whether a thread is running or stopped. In the latter case, this + information is reflected for the user by visual cues in the display, but the invisible + attribute actually determines the behavior.

    Ignore State

    @@ -327,7 +325,7 @@

    Color Options

    -

    The debugger represents different types of objects with different colors. Bare in mind these +

    The debugger represents different types of objects with different colors. Bear in mind these colors are not blended, i.e. one color may override another. Examples include:

      @@ -345,7 +343,6 @@ populated)
    • Targets: native objects with special properties
    • -

    -
    + diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html index e7ef4f2ac5..15f4e3922e 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html @@ -34,7 +34,7 @@

    P-code stepping is built into the emulation framework, and so the other UI elements (listing, registers, etc.) will display machine state from emulated p-code operations, i.e., partially executed machine instructions. The p-code stepper provides a means of navigating time - at p-code-level and displaying p-code-level details of the machine state.

    + at the p-code-level and displaying p-code-level details of the machine state.

    Table Columns

    @@ -42,8 +42,8 @@ values and user-assigned types. It has the following columns:

      -
    • Ref - describes how the select p-code operation uses the variable. Blank indicates no - reference. A ← indicates read. A → indicates write.
    • +
    • Ref - describes how the selected p-code operation uses the variable. Blank indicates no + reference. A left arrow ← indicates read. A right arrow → indicates write.
    • Unique - the name (address and size) of the variable.
    • @@ -58,24 +58,21 @@

      Actions

      -

      The p-code stepper provides the following actions:

      +

      The p-code stepper provides the following actions. Regarding other windows' ability to + interact with the target, stepping at the p-code level implies you are no longer "at the + present."

      Step Trace p-code Backward

      This action is available when the current coordinates have some positive number of p-code - ticks. It steps the trace backward to the previous p-code tick, possibly using emulation. Note - that stepping backward does not affect the target, and many windows that would ordinarily - interact with a live target, may no longer do so, until the user steps back to the present. - Note also that any component or script that does interact with the target and record things - "into the present" may not cause updates in windows that are not displaying the present.

      + ticks. It steps the trace backward to the previous p-code tick.

      Step Trace p-code Forward

      This action is available when a thread is selected. It steps the current thread forward to - the next p-code tick, using emulation. Note that emulation does not affect the target, and many - windows that would ordinarily interact with a live target, may not longer do so, until the user - steps back to the present. Note also that any component or script that does interact with the - target and record things "into the present" may not cause updates in windows that are not - displaying the present.

      + the next p-code tick, using emulation. Note that emulation does not affect the target. + Furthermore, emulation of p-code user-ops, including those indicating a system call, is + generally not possible. Pluggable mechanisms for emulating user-ops and/or simulating a more + complete system is a work in progress.

      diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegistersPlugin/DebuggerRegistersPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegistersPlugin/DebuggerRegistersPlugin.html index 2ef13abe39..6c9df48119 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegistersPlugin/DebuggerRegistersPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegistersPlugin/DebuggerRegistersPlugin.html @@ -80,10 +80,10 @@

      The dialog provides more information about each register, potentially displays a larger set of registers, and permits the precise selection of registers to include in the window. This varies from using the table filter in that the register window will not query the target for a - register unless it is selected. Note that de-selecting a register does not prohibit other + register unless it is selected. Note that deselecting a register does not prohibit other components from reading that register. For example, the program counter and stack pointer are read by the recorder whether or not they're displayed in the table. The actions allow for the - addition and subtraction of selections from the register set. Most columns are self-explanator + addition and subtraction of selections from the register set. Most columns are self-explanatory or duplicate the same column in the main window. The "Known" column indicates whether Ghidra was able to find the same register on the target. Unknown registers are never populated by the recorder, but they can still be populated by the user. Modifying the values of unknown diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html index 31a51579aa..a6a24a147d 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html @@ -23,15 +23,15 @@

      The stack window displays the current trace's execution stack, as unwound and reported by - the target. Not all debuggers will unwind the stack, in which case, this window displays a - synthetic innermost frame. When emulation was used to generate the current machine state, only - a synthetic frame is shown. Level 0 always refers to the innermost frame, and each incremental - level refers to the next caller in the chain — most of the time. The current frame - comprises one element of the tool's current "coordinates." Selecting a frame changes those - coordinates, potentially causing other windows to display different information. Namely, the Registers window - will show registers for the current frame, assuming they can be retrieved. The Listings may - also navigate to the current frame's program counter.

      + the target. Not all debuggers will unwind the stack, in which case, this window displays only + the innermost frame. When emulation is used to generate the current machine state, only a + single synthetic frame is shown. Level 0 always refers to the innermost frame, and each + incremental level refers to the next caller in the chain — most of the time. The current + frame comprises one element of the tool's current "coordinates." Selecting a frame changes + those coordinates, potentially causing other windows to display different information. Namely, + the Registers + window will show registers for the current frame, assuming they can be retrieved. The Listings + may also navigate to the current frame's program counter.

      Table Columns

      diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/DebuggerStaticMappingPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/DebuggerStaticMappingPlugin.html index 2a6a776b16..33dc843704 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/DebuggerStaticMappingPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/DebuggerStaticMappingPlugin.html @@ -28,7 +28,7 @@ automation, e.g., the Map Modules bot, or by higher-level user actions, e.g., the Map Modules - action. This under-the-hood static mapping window dislays the mappings table, allowing users or + action. This under-the-hood static mapping window displays the mappings table, allowing users or developers to diagnose image mapping issues and manually add mappings, regardless of reported modules and/or sections. For most users, there is no reason to access this window.

      @@ -63,10 +63,11 @@

      Add Mapping

      -

      This action is available when one primary listing (dynamic or static) has a selection, and - the other's cursor is at a valid location. It will add a mapping, using the selection's size - and minimum address, and the cursor as the corresponding minimum address. The lifespan given is - "from now on out", i.e., the current time to infinity.

      +

      This action is always available. It presents a dialog to manually add a mapping. When one + primary listing (dynamic or static) has a selection, and the other's cursor is at a valid + location, it will populate the dialog, using the selection's size and minimum address, and the + cursor as the corresponding minimum address. The default lifespan is "from now on out", i.e., + the current snap to infinity.

      Remove Mapping

      diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/images/DebuggerStaticMappingPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStaticMappingPlugin/images/DebuggerStaticMappingPlugin.png index d0df709e62ecac3de83a1829628a36901e9b1ffb..009bab89237f46d0cc89a3c303c7793e02d77ec4 100644 GIT binary patch literal 16779 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 NdfG;}P&Xci{vRq{sEz;t literal 16921 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 Xixl3xW_%=h@4CS)Q{B3o_oM$0GJZ${ diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/DebuggerTargetsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/DebuggerTargetsPlugin.html index c118a3418c..8d4059bc1f 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/DebuggerTargetsPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/DebuggerTargetsPlugin.html @@ -22,13 +22,12 @@ -

      The targets window manages connections to live debuggers. In most cases, a "connection" is a - connection to a local "agent" process which manages a native debugger, communicating +

      The targets window manages connections to live debuggers. In most cases, each item is a + GADP/TCP connection to a local "agent" process which manages a native debugger, communicating information about its targets. It is possible, however, to create a connection without starting an agent, e.g., to re-connect to an existing agent, or a remote agent. Additionally, different - connectors may implement alternative protocols, permitting direct communication with a native - target. This window allows the user to establish new connections and disconnect from existing - sessions.

      + connectors may implement alternative protocols, or use a debugging API directly. This window + allows the user to establish and terminate connections.

      Actions

      @@ -36,7 +35,7 @@

      Connect

      -

      Prompts the user to select a launcher and configure its parameters.

      +

      Prompts the user to select a connector and configure its parameters.

      @@ -46,27 +45,29 @@
      -

      The top drop-down displays a list of pluggable connectors or launchers. A description and - the options for the currently-selected launcher are displayed below. Some launchers will start - new sessions; whereas, others may simply connect to existing sessions. Each connector defines - its own options, but common ones include port numbers, host names, the system paths of - debugging components, etc. The launchers should provide help in the form of tool-tips, accessed - by hovering over each option name. Selecting "connect" will launch the connector and dismiss - the dialog.

      +

      The top drop-down displays a list of pluggable connectors. A description and the options for + the currently-selected connector are displayed below. Some will start a new session, while + others may simply connect to an existing session. Each connector defines its own options, but + common ones include port numbers, host names, the system paths of debugging components, etc. + Each connector should provide help in the form of tool tips, accessed by hovering over an + option's name. Clicking "Connect" will start the connector and dismiss the dialog.

      Disconnect

      -

      This action is available when a connection is selected. It destroys the connection. Note, - this does not necessarily destroy all processes created by the connector.

      +

      This action is available when a connection is selected. It closes the connection. Note, + depending on the robustness of the connector's termination logic, this may not clean up all + processes created by the connector.

      Disconnect All

      This action is always available. It closes all debugger connections, no matter what tool - created them. This is a sort of panic and reset action.

      + created them. This is a sort of panic and reset action. As with Disconnect, clean-up depends on + each connector's implementation.

      Flush Caches

      -

      This maintenance command instructs the connector to flush its local caches. It should - rarely, if ever, be needed by the user.

      +

      This maintenance command instructs the selected connector to flush its local caches. It + should rarely, if ever, be needed by the user. It may be useful if, e.g., stale memory is not + getting updated.

      diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/images/DebuggerTargetsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTargetsPlugin/images/DebuggerTargetsPlugin.png index a98e95cbb268c008e277fddf5570d5b51a8c4b0d..ea40e459542e1ab12149f0900c50dc17d8098f83 100644 GIT binary patch literal 9174 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 diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html index ae3807076a..3382768817 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html @@ -38,37 +38,37 @@ open trace in a button, where the "current" or "focused" trace is selected. Clicking a tab will select its trace and focus the tool onto it. A trace associated with a live target has a red "recording" icon at its left. If that icon is not present, or has disappeared, the trace is - dead or terminated. A "dead" trace can still be manipulated and marked up, but it will - (obviously) not record any new information from the (dead) target.

      + dead or terminated. A "dead" trace can still be manipulated and marked up, but it will not + record any new target information.

      In most cases, a trace is ephemeral, but occasionally, interesting behavior is observed that - is difficult to store as program mark-up. When a trace is no longer needed, it can be closed by + is difficult to store as static mark-up. When a trace is no longer needed, it can be closed by right-clicking the tab and selecting "Close Trace." Warning: closing a - trace that has not been saved cannot be undone. If you have gathered a collection of - unwanted traces, use the "Close Others," "Close Dead," or "Close All" action from the pop-up + trace that has not been saved cannot be undone. If you accumulate many unwanted + traces, use one of the "Close Others," "Close Dead," or "Close All" actions from the pop-up menu.

      Navigating Threads

      Selecting a thread in the timeline or the table will navigate to (or "activate" or "focus") - that thread. Many windows which are sensitive to the current thread will update. Notably, the - Registers window - will display the new thread's register values. Registers window + will display the activated thread's register values. Listing windows with - configured location tracking will re-compute that location with the new thread's context and - navigate to it. The thread timeline displays all recorded threads in a timeline. Threads which - are alive will appear to extend "to the end of time." The threads table displays more detailed - information, in the following columns:

      + configured location tracking will re-compute that location with the thread's context and + navigate to it. The thread timeline displays all recorded threads. Threads which are alive will + appear to extend "to the end of time." The threads table displays more detailed information in + the following columns:

      • Name - the name of the thread given by the debugger. Often, this is just an index or - unique id assigned to the thread. This field can be modified, and it has no effect on the + unique id assigned to the thread. This field can be modified, but it has no effect on the target.
      • -
      • Created - the point in time when this thread was first observed. If the thread's creation - was observed, then it is its creation time.
      • +
      • Created - the snapshot when this thread was first observed. If the thread's creation was + observed, then it is its creation time.
      • -
      • Destroyed - if destroyed, the point in time when this thread was last observed. If the +
      • Destroyed - if destroyed, the snapshot when this thread was last observed. If the thread's destruction was observed, then it is its destruction time.
      • State - the thread's current state. For a dead trace, this is either ALIVE or TERMINATED, @@ -84,48 +84,39 @@

        The user can navigate through time within the current trace by using the caret above the threads timeline. There are also actions for "stepping the trace" forward and backward. See the Time window for a way to - display and navigate to specific events in the trace's timeline.

        + display and navigate to specific events in the trace's timeline. Note that stepping away from + the present will prevent most windows from interacting with the live target. While some + components and scripts may interact with the target and record things "into the present," such + updates may not appear on screen until the user steps back to the present. Stepping the trace + does not affect the target, except that viewing the present requires querying the live target, + which can perturb its state.

        -

        Step Track +

        Step Trace Snap Backward

        This action is available when there exists a snapshot previous to the current. It steps the trace backward to the previous snapshot, causing most windows to display the recorded data from - the new point in time. Note that stepping backward does not affect the target, and many windows - that would ordinarily interact with a live target, may no longer do so, until the user steps - back to the present. Note also that any component or script that does interact with the target - and record things "into the present" will not cause updates in windows that are not displaying - the present.

        + the new point in time.

        Step Trace Snap Forward

        This action is available when there exists a snapshot ahead of the current. It steps the trace forward to the next snapshot, causing most windows to display the recorded data from the - new point in time. If the new point in time represents "the present" for a live trace, then - many windows will resume interacting with the target. Note that stepping the trace does not - affect the target; however, stepping back to the present may cause some windows to query the - target.

        + new point in time.

        -

        Step Track +

        Step Trace Tick Backward

        -

        This action is available when there exists a point in time previous to the current. It steps - the trace backward to the previous tick, possibly using emulation. Note that stepping backward - does not affect the target, and many windows that would ordinarily interact with a live target, - may no longer do so, until the user steps back to the present. Note also that any component or - script that does interact with the target and record things "into the present" may not cause - updates in windows that are not displaying the present.

        +

        This action is available when the current point in time includes emulated steps. It steps + the trace backward to the previous tick.

        Step Trace Tick Forward

        This action is available when a thread is selected. It steps the current thread forward to - the next tick, using emulation. Note that emulation does not affect the target, and many - windows that would ordinarily interact with a live target, may no longer do so, until the user - steps back to the present. Note also that any component or script that does interact with the - target and record things "into the present" may not cause updates in windows that are not - displaying the present.

        + the next tick, using emulation. Note that emulation does not affect the target. Furthermore, + emulation may halt early if it encounters certain instructions or causes an exception.

        Seek Trace to Present

        @@ -134,12 +125,10 @@ current trace is live, it immediately steps the trace to the present. Furthermore, as long as it is enabled and the current trace is live, whenever the recorder steps forward, the tool steps with it. In most cases, this option should remain on, otherwise stepping the target will - not cause any windows to update to the new machine state. Toggling it off then on is a quick - way to return to the present after browsing the past.

        + not cause any windows to update. Toggling it off then on is a quick way to return to the + present after browsing the past.

        -

        Actions

        - -

        There are additional actions for managing focus and traces.

        +

        Other Actions

        Synchronize Trace and Target Focus

        diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/images/DebuggerThreadsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/images/DebuggerThreadsPlugin.png index 2b60416b650cc0adbc3acd7d26bfebede5c870dd..2ad4a4bb743e00a729303096c87a149096bceb97 100644 GIT binary patch literal 22293 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 literal 21581 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 -

        This window displays all recorded "snapshots" in the current trace. Typically, there is one - snapshot per event recorded. Other tables often display the times of various events or use time - ranges to describe lifespans of various records. Those times refer to the "snap," which is a - 0-up counter of snapshot records. Thus, a snapshot is a collection of observations of a - target's state, usually while suspended, along with any user mark up. Selecting a snapshot - navigates to the selected point in time. Note that browsing the past may prevent other windows - from interacting with a live target.

        +

        This window displays all recorded snapshots in the current trace. Typically, there is one + snapshot per event recorded. Other windows often display the times of various events or use + time ranges to describe lifespans of various records. Those times refer to the "snap," which is + a 0-up counter of snapshot records. Thus, a snapshot is a collection of observations of a + target's state, usually while suspended, along with any mark up. Selecting a snapshot navigates + to the selected point in time. Note that browsing the past may prevent other windows from + interacting with a live target.

        Table Columns

        @@ -44,8 +44,11 @@
      • Event Thread - the thread that caused the event, if applicable. In the case of thread creation, this should probably be the spawned thread, not the parent.
      • -
      • Ticks - the number of ticks until the next snapshot, if known. If not known, or if - nothing cared to record or compute this, it is 0.
      • +
      • Schedule - if applicable, a source snap and the stepping schedule which produces this + snapshot. This always applies to "scratch" snapshots produced by emulation, but may also + apply if the stepping schedule between recorded events is somehow known. Typically, it is + just the number of steps of the source snapshot's event thread; however, the notation does + allow other threads to be stepped, too.
      • Description - a user-modifiable description of the snapshot or event. This defaults to the debugger's description of the event.
      • @@ -58,7 +61,7 @@

        Hide Scratch

        This toggle action is always available. It is enabled by default. The emulation service, - which enabled trace extrapolation and interpolation, writes emulated state into the trace's + which enables trace extrapolation and interpolation, writes emulated state into the trace's "scratch space," which comprises all negative snaps. When this toggle is enabled, those snapshots are hidden. They can be displayed by disabling this toggle. Note that navigating into scratch space may cause temporary undefined behavior in some windows, and may prevent diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html index 109323e406..14c36cb3e2 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html @@ -13,11 +13,11 @@

        Debugger: Trace Management

        -

        This service plugin manages the collection of open traces, and it controlled primarily via - the Threads window. - It maintains a list of open traces, the active trace coordinates (trace, time, thread, frame), - and permits saving, opening, and closing traces. To some extent, it also tracks which traces - are being actively recorded.

        +

        This service plugin manages the collection of open traces, and it is controlled primarily + via the Threads + window. It maintains a list of open traces, the active trace coordinates (trace, time, thread, + frame), and permits saving, opening, and closing traces. To some extent, it also tracks which + traces are being actively recorded.

        Actions

        @@ -48,10 +48,9 @@

        Close Other Traces

        -

        This action is available whenever there is an open trace other than the active one -- - usually two or more open traces. It closes all traces in this tool, except the active trace. - WARNING: Any closed trace that has not been saved will be lost, even - when Save by Default is active.

        +

        This action is available whenever there is an open trace other than the active one. It + closes all traces in this tool, except the active trace. WARNING: Any + closed trace that has not been saved will be lost, even when Save by Default is active.

        Close Dead Traces

        diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerWatchesPlugin/DebuggerWatchesPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerWatchesPlugin/DebuggerWatchesPlugin.html index 1c2a00fc3a..d82b143c25 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerWatchesPlugin/DebuggerWatchesPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerWatchesPlugin/DebuggerWatchesPlugin.html @@ -24,15 +24,15 @@

        Watches refer to expressions which are evaluated each pause in order to monitor the value of variables in the target machine state. The watch variables are expressed in Sleigh and - evaluated in the current thread's and trace's context at the current point in time. If the - current trace is live and at the present, then the target state is read and recorded as - necessary. The watch can be assigned a data type so that the raw data is rendered in a - meaningful way. When applicable, that data type can optionally be applied to the trace - database. Some metadata about the watch is also given, e.g., the address of the value.

        + evaluated in the current thread's context at the current point in time. If the current trace is + live and at the present, then the necessary target state is queried and recorded. The watch can + be assigned a data type so that the raw data is rendered in a meaningful way. When applicable, + that data type can optionally be applied to the trace database. Some metadata about the watch + is also given, e.g., the address of the value.

        Examples

        -

        For those less familar with Sleigh, here are some example expressions:

        +

        For those less familiar with Sleigh, here are some example expressions:

        • *:4 (RSP+8): Display 4 bytes of [ram] starting 8 bytes after the offset @@ -68,15 +68,15 @@ trace. Clicking the Apply Data Type action will apply it to the current trace, if possible.
        • -
        • Representation - the value of the watch as interpreted the selected data type.
        • +
        • Representation - the value of the watch as interpreted by the selected data type.
        • Error - if an error occurs during compilation or evaluation of the expression, that error is rendered here. Double-clicking the row will display the stack trace. Note that errors during evaluation can be a very common occurrence, especially as contexts change, and should - not cause alarm. An expression devised for one context may not have meaning under another, - even if it evaluates without error. E.g., RIP will disappear when switching to a - 32-bit trace, or *:8 (*:8 (RSP+8)) may cause an invalid dereference if an x86 - PUSH causes *:8 (RSP+8) to become 0.
        • + not necessarily cause alarm. An expression devised for one context may not have meaning under + another, even if it evaluates without error. E.g., RIP will disappear when + switching to a 32-bit trace, or *:8 (*:8 (RSP+8)) may cause an invalid + dereference if an x86 PUSH causes *:8 (RSP+8) to become 0.

        Actions

        @@ -85,14 +85,14 @@

        Apply Data to Listing

        -

        This action is available when there's an active trace and at least one watch with an address - and data type is selected. If so, it applies that data type to the value in the listing. That - is, it attempts to apply the selected data type to the evaluated address, sizing it to the - value's size.

        +

        This action is available when there's an active trace, and at least one watch with an + address and data type is selected. If so, it applies that data type to the value in the + listing. That is, it attempts to apply the selected data type to the evaluated address, sizing + it to the value's size.

        Select Range

        -

        This action is available when there's an active trace and at least one watch with memory +

        This action is available when there's an active trace, and at least one watch with memory addresses is selected. It selects the memory range comprising the resulting value. This only works when the outermost operator of the expression is a memory dereference. It selects the range at the address of that dereference having the size of the dereference. For example, the @@ -101,7 +101,7 @@

        Select Reads

        -

        This action is available when there's an active trace and at least one watch with memory +

        This action is available when there's an active trace, and at least one watch with memory reads is selected. It selects all memory ranges dereferenced in the course of expression evaluation. This can be useful when examining a watch whose value seems unusual. For example, the expression *:8 RSP would cause 8 bytes of memory, starting at the offset given @@ -111,7 +111,8 @@

        Add

        -

        This action is always available. It adds a blank watch to the table.

        +

        This action is always available. It adds a blank watch to the table. Modify the expression + to make the entry useful.

        Remove

        diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java index 175c099d1f..06195e0a11 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java @@ -573,6 +573,22 @@ public interface DebuggerResources { } } + abstract class AbstractStepLastAction extends DockingAction { + public static final String NAME = "Step Last"; + public static final Icon ICON = ICON_STEP_FINISH; // TODO: Draw one + public static final String HELP_ANCHOR = "step_last"; + + public static HelpLocation help(Plugin owner) { + return new HelpLocation(owner.getName(), HELP_ANCHOR); + } + + public AbstractStepLastAction(Plugin owner) { + super(NAME, owner.getName()); + setDescription("Repeat the last stepping action"); + setHelpLocation(help(owner)); + } + } + abstract class AbstractInterruptAction extends DockingAction { public static final String NAME = "Interrupt"; public static final Icon ICON = ICON_TERMINATE; @@ -956,12 +972,14 @@ public interface DebuggerResources { interface SelectNoneAction { String NAME = "Select None"; String GROUP = "Select"; + String HELP_ANCHOR = "select_none"; static ActionBuilder builder(Plugin owner) { String ownerName = owner.getName(); return new ActionBuilder(NAME, ownerName) .popupMenuGroup(GROUP) - .popupMenuPath(NAME); + .popupMenuPath(NAME) + .helpLocation(new HelpLocation(ownerName, HELP_ANCHOR)); } } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java index 2ebb026554..5099ba2021 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java @@ -1169,11 +1169,11 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter new ActionBuilder("Step Last", plugin.getName()) .keyBinding("ALT F8") .toolBarGroup(DebuggerResources.GROUP_CONTROL, "C" + groupTargetIndex) - .toolBarIcon(AbstractStepFinishAction.ICON) + .toolBarIcon(AbstractStepLastAction.ICON) .popupMenuPath("&Step Last") .popupMenuGroup(DebuggerResources.GROUP_CONTROL, "C" + groupTargetIndex) - .popupMenuIcon(AbstractStepFinishAction.ICON) - .helpLocation(AbstractStepFinishAction.help(plugin)) + .popupMenuIcon(AbstractStepLastAction.ICON) + .helpLocation(AbstractStepLastAction.help(plugin)) //.withContext(ObjectActionContext.class) .enabledWhen(ctx -> isInstance(ctx, TargetSteppable.class) && isStopped(ctx)) diff --git a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsPluginScreenShots.java b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsPluginScreenShots.java index 49c056e0e2..1cdefee288 100644 --- a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsPluginScreenShots.java +++ b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsPluginScreenShots.java @@ -96,9 +96,9 @@ public class DebuggerTargetsPluginScreenShots extends GhidraScreenShotGenerator @Test public void testCaptureDebuggerTargetsPlugin() throws Throwable { modelService.addModel( - new ScreenShotDebuggerObjectModel("Demo connection to 'localhost:12345'")); + new ScreenShotDebuggerObjectModel("DEMO@1234abcd localhost:12345")); modelService.addModel( - new ScreenShotDebuggerObjectModel("Demo connection to 'debug-demo:12345'")); + new ScreenShotDebuggerObjectModel("DEMO@4321fedc debug-demo:12345")); captureIsolatedProvider(targetsProvider, 400, 300); } diff --git a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java index c08a148bcf..298a5848b6 100644 --- a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java +++ b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java @@ -26,6 +26,7 @@ import ghidra.app.services.DebuggerTraceManagerService; import ghidra.app.services.TraceRecorder; import ghidra.dbg.model.*; import ghidra.trace.model.Trace; +import ghidra.trace.model.thread.TraceThread; import ghidra.util.database.UndoableTransaction; import help.screenshot.GhidraScreenShotGenerator; @@ -44,6 +45,10 @@ public class DebuggerThreadsPluginScreenShots extends GhidraScreenShotGenerator threadsPlugin = addPlugin(tool, DebuggerThreadsPlugin.class); } + protected boolean nullOrDead(TraceThread thread) { + return thread == null || !thread.isAlive(); + } + @Test public void testCaptureDebuggerThreadsPlugin() throws Throwable { mb.createTestModel(); @@ -77,12 +82,12 @@ public class DebuggerThreadsPluginScreenShots extends GhidraScreenShotGenerator recorder.forceSnapshot(); process.removeThreads(handler1Thread); - waitFor(() -> recorder.getTraceThread(handler1Thread) == null); + waitFor(() -> nullOrDead(recorder.getTraceThread(handler1Thread))); recorder.forceSnapshot(); recorder.forceSnapshot(); recorder.forceSnapshot(); process.removeThreads(handler2Thread); - waitFor(() -> recorder.getTraceThread(handler2Thread) == null); + waitFor(() -> nullOrDead(recorder.getTraceThread(handler2Thread))); long lastSnap = recorder.forceSnapshot().getKey(); traceManager.openTrace(trace);