From 7774e85d6a1419f19af50a7762981662a672310a Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Mon, 1 Mar 2021 14:22:45 -0500 Subject: [PATCH 1/2] [Mono.Debugger.Soft] add Module.ApplyChanges Requires protocol version 2.60 --- Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs | 6 ++++++ Mono.Debugger.Soft/Mono.Debugger.Soft/ModuleMirror.cs | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs b/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs index 6ebae5811..5003825bc 100644 --- a/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs +++ b/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs @@ -567,6 +567,7 @@ enum CmdAssembly { enum CmdModule { GET_INFO = 1, + APPLY_CHANGES = 2, } enum CmdMethod { @@ -2357,6 +2358,11 @@ internal ModuleInfo Module_GetInfo (long id) { return info; } + + internal void Module_ApplyChanges (long id, long dmeta_id, long dil_id, long dpdb_id) { + SendReceive (CommandSet.MODULE, (int)CmdModule.APPLY_CHANGES, new PacketWriter().WriteId (id).WriteId (dmeta_id).WriteId (dil_id).WriteId (dpdb_id)); + } + /* * ASSEMBLY */ diff --git a/Mono.Debugger.Soft/Mono.Debugger.Soft/ModuleMirror.cs b/Mono.Debugger.Soft/Mono.Debugger.Soft/ModuleMirror.cs index 03dfcc19a..d585c1599 100644 --- a/Mono.Debugger.Soft/Mono.Debugger.Soft/ModuleMirror.cs +++ b/Mono.Debugger.Soft/Mono.Debugger.Soft/ModuleMirror.cs @@ -70,5 +70,13 @@ public string SourceLink { return info.SourceLink; } } + + // Apply a hot reload delta to the current module + // Since protocol version 2.60 + public void ApplyChanges (ArrayMirror dmeta, ArrayMirror dIL, Value dPDB) { + /* dPDB is Value because it can be ArrayMirror or PrimitiveValue (vm, null) */ + vm.CheckProtocolVersion (2, 60); + vm.conn.Module_ApplyChanges (id, dmeta.Id, dIL.Id, dPDB.Id); + } } } From 1f7ba29292abbc382ceaee4316e7ded16c26ccb1 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Tue, 2 Mar 2021 13:47:58 -0500 Subject: [PATCH 2/2] [Mono.Debugging.Soft] Add SoftDebuggerSession.ApplyChanges --- Mono.Debugging.Soft/SoftDebuggerSession.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Mono.Debugging.Soft/SoftDebuggerSession.cs b/Mono.Debugging.Soft/SoftDebuggerSession.cs index 4e7235de9..3d4bb739d 100644 --- a/Mono.Debugging.Soft/SoftDebuggerSession.cs +++ b/Mono.Debugging.Soft/SoftDebuggerSession.cs @@ -3304,6 +3304,19 @@ public AssemblyLine[] Disassemble (StackFrame frame, int firstLine, int count) return lines.ToArray (); } + public void ApplyChanges (ModuleMirror module, byte[] metadataDelta, byte[] ilDelta, byte[] pdbDelta = null) + { + var rootDomain = VirtualMachine.RootDomain; + var metadataArray = rootDomain.CreateByteArray (metadataDelta); + var ilArray = rootDomain.CreateByteArray (ilDelta); + Value pdbArray; + if (pdbDelta == null) + pdbArray = VirtualMachine.CreateValue (null); + else + pdbArray = rootDomain.CreateByteArray (pdbDelta); + + module.ApplyChanges (metadataArray, ilArray, pdbArray); + } static string EscapeString (string text) { var escaped = new StringBuilder ();