From 96bfb3c84f4374948e678363178c07a7a7250da1 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 7 Dec 2023 15:34:52 -0500 Subject: [PATCH] GP-4093: Add "Module" column to "Stack" panel. --- .../core/debug/gui/modules/ModuleRow.java | 23 +++++++++++-------- .../gui/stack/DebuggerLegacyStackPanel.java | 3 +++ .../debug/gui/stack/DebuggerStackPanel.java | 19 ++++++++++++++- .../gui/stack/DebuggerStackProvider.java | 17 ++++++++++++++ .../core/debug/gui/stack/StackFrameRow.java | 4 ++++ 5 files changed, 55 insertions(+), 11 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java index bd2ce6327c..91c6597818 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java @@ -40,17 +40,20 @@ public class ModuleRow { } } + public static String computeShortName(String path) { + int sep = path.lastIndexOf('\\'); + if (sep > 0 && sep < path.length()) { + path = path.substring(sep + 1); + } + sep = path.lastIndexOf('/'); + if (sep > 0 && sep < path.length()) { + path = path.substring(sep + 1); + } + return path; + } + public String getShortName() { - String name = module.getName(); - int sep = name.lastIndexOf('\\'); - if (sep > 0 && sep < name.length()) { - name = name.substring(sep + 1); - } - sep = name.lastIndexOf('/'); - if (sep > 0 && sep < name.length()) { - name = name.substring(sep + 1); - } - return name; + return computeShortName(module.getName()); } public String getName() { diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerLegacyStackPanel.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerLegacyStackPanel.java index c076f5f5a7..d413fc0e3c 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerLegacyStackPanel.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerLegacyStackPanel.java @@ -60,6 +60,7 @@ public class DebuggerLegacyStackPanel extends JPanel { LEVEL("Level", Integer.class, StackFrameRow::getFrameLevel), PC("PC", Address.class, StackFrameRow::getProgramCounter), FUNCTION("Function", ghidra.program.model.listing.Function.class, StackFrameRow::getFunction), + MODULE("Module", String.class, StackFrameRow::getModule), COMMENT("Comment", String.class, StackFrameRow::getComment, StackFrameRow::setComment, StackFrameRow::isCommentable); private final String header; @@ -292,6 +293,8 @@ public class DebuggerLegacyStackPanel extends JPanel { pcCol.setCellRenderer(boldCurrentRenderer); TableColumn funcCol = columnModel.getColumn(StackTableColumns.FUNCTION.ordinal()); funcCol.setCellRenderer(boldCurrentRenderer); + TableColumn modCol = columnModel.getColumn(StackTableColumns.MODULE.ordinal()); + modCol.setCellRenderer(boldCurrentRenderer); TableColumn commCol = columnModel.getColumn(StackTableColumns.COMMENT.ordinal()); commCol.setCellRenderer(boldCurrentRenderer); } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerStackPanel.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerStackPanel.java index c36264fa4c..9ab01273dd 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerStackPanel.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/stack/DebuggerStackPanel.java @@ -40,6 +40,7 @@ import ghidra.framework.plugintool.annotation.AutoServiceConsumed; import ghidra.program.model.address.Address; import ghidra.program.model.listing.Function; import ghidra.trace.model.Trace; +import ghidra.trace.model.modules.TraceModule; import ghidra.trace.model.stack.TraceObjectStackFrame; import ghidra.trace.model.target.TraceObject; import ghidra.trace.model.target.TraceObjectValue; @@ -83,7 +84,22 @@ public class DebuggerStackPanel extends AbstractObjectsTableBasedPanel { + @Override + public String getColumnName() { + return "Module"; + } + + @Override + public String getValue(ValueRow rowObject, Settings settings, Trace data, + ServiceProvider serviceProvider) throws IllegalArgumentException { + TraceObjectValue value = + rowObject.getAttributeEntry(TargetStackFrame.PC_ATTRIBUTE_NAME); + return value == null ? null : provider.getModule(value.castValue()); } } @@ -98,6 +114,7 @@ public class DebuggerStackPanel extends AbstractObjectsTableBasedPanel