From 9596c5be4f67dc9808e8317a31226872d7cadf7e Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Mon, 4 Oct 2021 15:57:32 -0400 Subject: [PATCH 1/2] GP-1360: Fixed GDB/GADP agent death/hang in development mode. --- .../agent/gdb/manager/impl/GdbManagerImpl.java | 8 ++++++-- .../AbstractGadpLocalDebuggerModelFactory.java | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/impl/GdbManagerImpl.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/impl/GdbManagerImpl.java index 192881bf4a..0fdc9e71b1 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/impl/GdbManagerImpl.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/manager/impl/GdbManagerImpl.java @@ -37,16 +37,19 @@ import agent.gdb.manager.impl.cmd.*; import agent.gdb.manager.parsing.GdbMiParser; import agent.gdb.manager.parsing.GdbParsingUtils.GdbParseError; import agent.gdb.pty.*; +import ghidra.GhidraApplicationLayout; import ghidra.async.*; import ghidra.async.AsyncLock.Hold; import ghidra.dbg.error.DebuggerModelTerminatingException; import ghidra.dbg.util.HandlerMap; import ghidra.dbg.util.PrefixMap; import ghidra.framework.Application; +import ghidra.framework.GhidraApplicationConfiguration; import ghidra.lifecycle.Internal; import ghidra.util.Msg; import ghidra.util.SystemUtilities; import ghidra.util.datastruct.ListenerSet; +import ghidra.util.task.ConsoleTaskMonitor; import sun.misc.Signal; import sun.misc.SignalHandler; @@ -206,7 +209,8 @@ public class GdbManagerImpl implements GdbManager { private void initLog() { try { - File userSettings = Application.getUserSettingsDirectory(); + GhidraApplicationLayout layout = new GhidraApplicationLayout(); + File userSettings = layout.getUserSettingsDir(); File logFile = new File(userSettings, "GDB.log"); try { logFile.createNewFile(); @@ -216,7 +220,7 @@ public class GdbManagerImpl implements GdbManager { } DBG_LOG = new PrintWriter(new FileOutputStream(logFile)); } - catch (FileNotFoundException e) { + catch (IOException e) { throw new AssertionError(e); } } diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java index 3e0e19ede9..7f30d45033 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java @@ -47,6 +47,11 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements DebuggerM public final Property jdwpPortOption = Property.fromAccessors(int.class, this::getJdwpPort, this::setJdwpPort); + protected boolean jdwpSuspend = false; + @FactoryOption("Suspend for JDWP") + public final Property jdwpSuspendOption = + Property.fromAccessors(boolean.class, this::isJdwpSuspend, this::setJdwpSuspend); + /** * Get the name of the thread which processes the agent's stdout */ @@ -86,6 +91,14 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements DebuggerM this.jdwpPort = jdwpPort; } + public boolean isJdwpSuspend() { + return jdwpSuspend; + } + + public void setJdwpSuspend(boolean jdwpSuspend) { + this.jdwpSuspend = jdwpSuspend; + } + class AgentThread extends Thread { int port; Process process; @@ -104,7 +117,7 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements DebuggerM cmd.addAll(List.of("-cp", System.getProperty("java.class.path"))); if (jdwpPort >= 0) { cmd.add("-agentlib:jdwp=server=y,transport=dt_socket,address=" + jdwpPort + - ",suspend=n"); + ",suspend=" + (jdwpSuspend ? "y" : "n")); } completeCommandLine(cmd); builder.command(cmd); From bd17479f4869a8a21ed03c1e05e66926e24e4c67 Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Mon, 4 Oct 2021 17:29:22 -0400 Subject: [PATCH 2/2] Upping patch version to 10.0.5 --- Ghidra/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ghidra/application.properties b/Ghidra/application.properties index 8267443d3a..35aa09f606 100644 --- a/Ghidra/application.properties +++ b/Ghidra/application.properties @@ -1,5 +1,5 @@ application.name=Ghidra -application.version=10.0.4 +application.version=10.0.5 application.release.name=DEV application.layout.version=1 application.gradle.min=6.0