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 b4e0ed428f..88f4df0a83 100644 Binary files a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png and b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png differ 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 0000000000..b1e1ab4ede Binary files /dev/null and b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoints-make-effective.png differ 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 21da4fa7ce..c30378df45 100644 Binary files a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/images/DebuggerModulesPlugin.png and b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerModulesPlugin/images/DebuggerModulesPlugin.png differ 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:


    -
    + 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: