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 85b03c32d1..253f121d12 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 @@ -347,6 +347,10 @@ resulting changes in the GUI may be distracting for some. To disable updates to the Objects Viewer, toggle "Updates While Running" off.

+

Set Node Timeout

+ +

Set the default value for the timeout used when expanding a node, i.e. populating its children.

+

Color Options

The debugger represents different types of objects with different colors. Bear in mind these 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 c9f4b7835f..ceb22fca0f 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 @@ -182,6 +182,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter ImportFromXMLAction importFromXMLAction; ImportFromFactsAction importFromFactsAction; OpenWinDbgTraceAction openTraceAction; + SetTimeoutAction setTimeoutAction; private ToggleDockingAction actionToggleBase; private ToggleDockingAction actionToggleSubscribe; @@ -204,6 +205,8 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter private boolean updateWhileRunning = true; @AutoConfigStateField private boolean suppressDescent = false; + @AutoConfigStateField + private int nodeTimeout = 60; Set configurables = new HashSet<>(); private String lastMethod = ""; @@ -857,7 +860,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter .buildAndInstallLocal(this); groupTargetIndex++; - + /* actionSuppressDescent = new ToggleActionBuilder("Automatically populate containers", plugin.getName()) .menuPath("Maintenance","&Auto-populate") @@ -1222,6 +1225,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter importFromXMLAction = new ImportFromXMLAction(tool, plugin.getName(), this); importFromFactsAction = new ImportFromFactsAction(tool, plugin.getName(), this); openTraceAction = new OpenWinDbgTraceAction(tool, plugin.getName(), this); + setTimeoutAction = new SetTimeoutAction(tool, plugin.getName(), this); } //@formatter:on @@ -1858,6 +1862,14 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter this.autoRecord = autorecord; } + public int getNodeTimeout() { + return nodeTimeout; + } + + public void setNodeTimeout(int timeout) { + this.nodeTimeout = timeout; + } + public void updateActions(ObjectContainer providerContainer) { TargetObject obj = getSelectedObject(); if (obj != null) { @@ -1889,6 +1901,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter actionToggleAutoRecord.setSelected(autoRecord); actionToggleHideIntrinsics.setSelected(hideIntrinsics); actionToggleSelectionOnly.setSelected(selectionOnly); + setTimeoutAction.setNodeTimeout(nodeTimeout); methodDialog.readConfigState(saveState); } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/actions/SetTimeoutAction.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/actions/SetTimeoutAction.java new file mode 100644 index 0000000000..7b6fb803e8 --- /dev/null +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/actions/SetTimeoutAction.java @@ -0,0 +1,61 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.app.plugin.core.debug.gui.objects.actions; + +import docking.ActionContext; +import docking.action.DockingAction; +import docking.action.MenuData; +import ghidra.app.plugin.core.debug.gui.objects.DebuggerObjectsProvider; +import ghidra.app.script.AskDialog; +import ghidra.framework.plugintool.PluginTool; +import ghidra.util.HelpLocation; + +public class SetTimeoutAction extends DockingAction { + + DebuggerObjectsProvider provider; + int timeout = 0; + + public SetTimeoutAction(PluginTool tool, String owner, DebuggerObjectsProvider provider) { + super("SetTimeout", owner); + setMenuBarData( + new MenuData(new String[] { "Maintenance", "&Set Node Timeout" }, null, "M100")); + setHelpLocation(new HelpLocation(owner, "set_node_timeout")); + this.provider = provider; + provider.addLocalAction(this); + this.timeout = provider.getNodeTimeout(); + } + + @Override + public boolean isEnabledForContext(ActionContext context) { + return true; + } + + @Override + public void actionPerformed(ActionContext context) { + AskDialog dialog = + new AskDialog("Set Node Timeout", "Seconds", AskDialog.INT, timeout); + if (dialog.isCanceled()) { + return; + } + timeout = Integer.parseInt(dialog.getValueAsString()); + provider.setNodeTimeout(timeout); + } + + public void setNodeTimeout(int timeout) { + this.timeout = timeout; + } + +} diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectNode.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectNode.java index 6d3320822c..8f9e71f451 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectNode.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectNode.java @@ -85,7 +85,8 @@ public class ObjectNode extends GTreeSlowLoadingNode { //extends GTreeNode if (cf != null) { // NB: We're allowed to do this because we're guaranteed to be // in our own thread by the GTreeSlowLoadingNode - ObjectContainer oc = cf.get(60, TimeUnit.SECONDS); + ObjectContainer oc = + cf.get(tree.getProvider().getNodeTimeout(), TimeUnit.SECONDS); return tree.update(oc); } }