From be8e27150a01c4e938d5dee02bc15f303a00d279 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Fri, 23 Apr 2021 16:12:22 -0400 Subject: [PATCH] GP-885: Better indication of ineffective breakpoints. Toggles on lower table. --- Ghidra/Debug/Debugger/certification.manifest | 7 + .../images/DebuggerPlaceBreakpointDialog.png | Bin 7308 -> 7329 bytes .../DebuggerBreakpointsPlugin.html | 43 ++- .../images/DebuggerBreakpointsPlugin.png | Bin 29159 -> 27786 bytes .../images/breakpoint-ineffective-d.png | Bin 0 -> 353 bytes .../images/breakpoint-ineffective-e.png | Bin 0 -> 302 bytes .../images/breakpoint-mixed-de.png | Bin 0 -> 368 bytes .../core/debug/gui/DebuggerResources.java | 23 ++ .../gui/breakpoint/BreakpointLocationRow.java | 28 +- ...erBreakpointEnablementTableCellEditor.java | 80 ++++++ ...BreakpointEnablementTableCellRenderer.java | 53 ++-- ...erBreakpointLocEnabledTableCellEditor.java | 67 +++++ ...BreakpointLocEnabledTableCellRenderer.java | 56 ++++ .../DebuggerBreakpointMarkerPlugin.java | 218 +++++++++++++--- .../DebuggerBreakpointsProvider.java | 27 +- .../DebuggerPlaceBreakpointDialog.java | 4 +- .../gui/breakpoint/LogicalBreakpointRow.java | 15 +- .../breakpoint/LogicalBreakpointInternal.java | 28 +- .../breakpoint/LoneLogicalBreakpoint.java | 4 +- .../breakpoint/MappedLogicalBreakpoint.java | 20 +- .../DebuggerLogicalBreakpointService.java | 17 +- .../app/services/LogicalBreakpoint.java | 245 ++++++++++++++++-- .../ghidra/app/services/TraceRecorder.java | 8 +- .../images/breakpoint-ineffective-d.png | Bin 0 -> 353 bytes .../images/breakpoint-ineffective-e.png | Bin 0 -> 302 bytes .../src/main/svg/breakpoint-ineffective-d.svg | 34 +++ .../src/main/svg/breakpoint-ineffective-e.svg | 36 +++ ...ggerBreakpointMarkerPluginScreenShots.java | 4 +- .../DebuggerBreakpointsPluginScreenShots.java | 9 +- .../DebuggerMemviewPluginScreenShots.java | 2 +- .../DebuggerBreakpointMarkerPluginTest.java | 20 +- .../DebuggerBreakpointsProviderTest.java | 59 +++-- .../DebuggerLogicalBreakpointServiceTest.java | 8 +- .../model/breakpoint/TraceBreakpointKind.java | 6 +- 34 files changed, 941 insertions(+), 180 deletions(-) create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-ineffective-d.png create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-ineffective-e.png create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-mixed-de.png create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointEnablementTableCellEditor.java create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointLocEnabledTableCellEditor.java create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointLocEnabledTableCellRenderer.java create mode 100644 Ghidra/Debug/Debugger/src/main/resources/images/breakpoint-ineffective-d.png create mode 100644 Ghidra/Debug/Debugger/src/main/resources/images/breakpoint-ineffective-e.png create mode 100644 Ghidra/Debug/Debugger/src/main/svg/breakpoint-ineffective-d.svg create mode 100644 Ghidra/Debug/Debugger/src/main/svg/breakpoint-ineffective-e.svg diff --git a/Ghidra/Debug/Debugger/certification.manifest b/Ghidra/Debug/Debugger/certification.manifest index eab950b8d5..1e12776852 100644 --- a/Ghidra/Debug/Debugger/certification.manifest +++ b/Ghidra/Debug/Debugger/certification.manifest @@ -31,6 +31,9 @@ src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.ht src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png||GHIDRA||||END| src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-disable.png||GHIDRA||||END| src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-enable.png||GHIDRA||||END| +src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-ineffective-d.png||GHIDRA||||END| +src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-ineffective-e.png||GHIDRA||||END| +src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-mixed-de.png||GHIDRA||||END| src/main/help/help/topics/DebuggerBreakpointsPlugin/images/breakpoint-mixed-ed.png||GHIDRA||||END| 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| @@ -120,6 +123,8 @@ src/main/resources/images/blank.png||GHIDRA||||END| src/main/resources/images/breakpoint-clear.png||GHIDRA||||END| src/main/resources/images/breakpoint-disable.png||GHIDRA||||END| src/main/resources/images/breakpoint-enable.png||GHIDRA||||END| +src/main/resources/images/breakpoint-ineffective-d.png||GHIDRA||||END| +src/main/resources/images/breakpoint-ineffective-e.png||GHIDRA||||END| src/main/resources/images/breakpoint-mixed-de.png||GHIDRA||||END| src/main/resources/images/breakpoint-mixed-ed.png||GHIDRA||||END| src/main/resources/images/breakpoint-set.png||GHIDRA||||END| @@ -165,6 +170,8 @@ src/main/svg/blank.svg||GHIDRA||||END| src/main/svg/breakpoint-clear.svg||GHIDRA||||END| src/main/svg/breakpoint-disable.svg||GHIDRA||||END| src/main/svg/breakpoint-enable.svg||GHIDRA||||END| +src/main/svg/breakpoint-ineffective-d.svg||GHIDRA||||END| +src/main/svg/breakpoint-ineffective-e.svg||GHIDRA||||END| src/main/svg/breakpoint-mixed-de.svg||GHIDRA||||END| src/main/svg/breakpoint-mixed-ed.svg||GHIDRA||||END| src/main/svg/breakpoint-set.svg||GHIDRA||||END| diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/images/DebuggerPlaceBreakpointDialog.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/images/DebuggerPlaceBreakpointDialog.png index a7a15a84b9dd39f43b41507349aaa5382d28a214..87db1282ca0324d5d4d64eaefba6b63c9f7be98a 100644 GIT binary patch literal 7329 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 literal 7308 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 refer to any mechanism which may trap execution based on an address. The breakpoints manager presents all active breakpoints among all open programs and live traces. Note that dead traces are not considered, and only the breakpoints at the present are - considered, even if the user has stepped a trace backward. Breakpoints which map to the same + displayed, even if the user has stepped a trace backward. Breakpoints which map to the same address in the same module, i.e., program image, and otherwise share the same attributes, are grouped into a logical breakpoint. NOTE: The breakpoints window cannot display or manipulate breakpoints from a target until that target is recorded into a trace. See the without respect to the specifications. Often the specification is at a higher stratum than Ghidra natively understands, e.g., the source filename and line number, and so such - specifications are not relevant. Note, however, that the model may not permit locations to be + specifications are not relevant. Note, however, that the model might not permit locations to be manipulated independently of their specification, which may limit how the manager can operate on each breakpoint location.

Because of the logical grouping of breakpoints, it is possible for a breakpoint to be in a mixed or inconsistent state. This happens quite commonly, e.g., when a breakpoint is placed in a Ghidra program before that program is mapped in any traced target. Once mapped in, the - location of that breakpoint in the trace is computed and noted as missing. A missing location - in a logical breakpoint is treated the same as a disabled breakpoint. Thus, the logical - breakpoint enters an inconsistent state, because it is "enabled" in the program, but "disabled" - in the trace. Toggling such a breakpoint enables all missing locations, bringing it into a - consistent enabled state. Toggling it again will disable all locations.

+ location of that breakpoint in the trace is computed and noted as missing. A logical breakpoint + without any location in a trace (i.e., on an actual target) is called "ineffective" and is + drawn in grey. An enabled logical breakpoint having a disabled location is called + "inconsistent" and its icon will indicate that state. A disabled logical breakpoint having an + enabled location is similarly "inconsistent." Toggling ineffective or inconsistent breakpoints + enables and/or places all locations, bringing it into a consistent enabled state. Toggling it + again disables all locations.

Tables and Columns

The top table, which lists logical breakpoints, has the following columns: