Skip to content

Commit 645b0e7

Browse files
committed
Поддержка признака terminateDebuggee
1 parent cdd29d1 commit 645b0e7

File tree

10 files changed

+42
-28
lines changed

10 files changed

+42
-28
lines changed

src/OneScript.DebugProtocol/IDebuggerService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,15 @@ public interface IDebuggerService
9898
[OperationContract(IsOneWay = true)]
9999
#endif
100100
void StepOut(int threadId);
101-
101+
102102
/// <summary>
103103
/// Отключение сеанса отладки по инициативе IDE
104104
/// </summary>
105+
/// <param name="terminate"></param>
105106
#if NETFRAMEWORK
106107
[OperationContract(IsOneWay = true)]
107108
#endif
108-
void Disconnect();
109+
void Disconnect(bool terminate);
109110

110111
#if NETFRAMEWORK
111112
[OperationContract]

src/OneScript.DebugServices/DefaultDebugService.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class DefaultDebugService : IDebuggerService
2121
{
2222
private readonly IBreakpointManager _breakpointManager;
2323
private readonly IVariableVisualizer _visualizer;
24-
private ThreadManager _threadManager { get; }
24+
private readonly ThreadManager _threadManager;
2525

2626
public DefaultDebugService(IBreakpointManager breakpointManager, ThreadManager threads, IVariableVisualizer visualizer)
2727
{
@@ -49,7 +49,7 @@ public void Execute(int threadId)
4949
}
5050
}
5151

52-
public virtual Breakpoint[] SetMachineBreakpoints(Breakpoint[] breaksToSet)
52+
public Breakpoint[] SetMachineBreakpoints(Breakpoint[] breaksToSet)
5353
{
5454
var confirmedBreakpoints = new List<Breakpoint>();
5555

@@ -82,7 +82,7 @@ public virtual Breakpoint[] SetMachineBreakpoints(Breakpoint[] breaksToSet)
8282
return confirmedBreakpoints.ToArray();
8383
}
8484

85-
public virtual StackFrame[] GetStackFrames(int threadId)
85+
public StackFrame[] GetStackFrames(int threadId)
8686
{
8787
var machine = _threadManager.GetTokenForThread(threadId).Machine;
8888
var frames = machine.GetExecutionFrames();
@@ -107,7 +107,7 @@ private MachineInstance GetMachine(int threadId)
107107
return _threadManager.GetTokenForThread(threadId).Machine;
108108
}
109109

110-
public virtual Variable[] GetVariables(int threadId, int frameIndex, int[] path)
110+
public Variable[] GetVariables(int threadId, int frameIndex, int[] path)
111111
{
112112
var machine = _threadManager.GetTokenForThread(threadId).Machine;
113113
var locals = machine.GetFrameLocals(frameIndex);
@@ -121,7 +121,7 @@ public virtual Variable[] GetVariables(int threadId, int frameIndex, int[] path)
121121
return GetDebugVariables(locals);
122122
}
123123

124-
public virtual Variable[] GetEvaluatedVariables(string expression, int threadId, int frameIndex, int[] path)
124+
public Variable[] GetEvaluatedVariables(string expression, int threadId, int frameIndex, int[] path)
125125
{
126126
IValue value;
127127

@@ -145,7 +145,7 @@ public virtual Variable[] GetEvaluatedVariables(string expression, int threadId,
145145
return GetDebugVariables(locals);
146146
}
147147

148-
public virtual Variable Evaluate(int threadId, int contextFrame, string expression)
148+
public Variable Evaluate(int threadId, int contextFrame, string expression)
149149
{
150150
try
151151
{
@@ -163,34 +163,34 @@ public virtual Variable Evaluate(int threadId, int contextFrame, string expressi
163163
}
164164
}
165165

166-
public virtual void Next(int threadId)
166+
public void Next(int threadId)
167167
{
168168
var t = _threadManager.GetTokenForThread(threadId);
169169
t.Machine.StepOver();
170170
t.Set();
171171
}
172172

173-
public virtual void StepIn(int threadId)
173+
public void StepIn(int threadId)
174174
{
175175
var t = _threadManager.GetTokenForThread(threadId);
176176
t.Machine.StepIn();
177177
t.Set();
178178
}
179179

180-
public virtual void StepOut(int threadId)
180+
public void StepOut(int threadId)
181181
{
182182
var t = _threadManager.GetTokenForThread(threadId);
183183
t.Machine.StepOut();
184184
t.Set();
185185
}
186186

187-
public void Disconnect()
187+
public void Disconnect(bool terminate)
188188
{
189189
_breakpointManager.Clear();
190190
_threadManager.ReleaseAllThreads();
191191
}
192192

193-
public virtual int[] GetThreads()
193+
public int[] GetThreads()
194194
{
195195
return _threadManager.GetAllThreadIds();
196196
}

src/OneScript.DebugServices/MachineWaitToken.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class MachineWaitToken: IDisposable
2626
public void Dispose()
2727
{
2828
Machine.UnsetDebugMode();
29+
_threadEvent.Set();
2930
_threadEvent.Dispose();
3031
}
3132
}

src/VSCode.DebugAdapter/DebugSession.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ public class Capabilities : ResponseBody {
180180
public bool supportsConditionalBreakpoints;
181181
public bool supportsEvaluateForHovers;
182182
public dynamic[] exceptionBreakpointFilters;
183+
public bool supportTerminateDebuggee;
183184
}
184185

185186
public class ErrorResponseBody : ResponseBody {

src/VSCode.DebugAdapter/DebugeeProcess.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,16 @@ private void Terminate()
147147
}
148148
}
149149

150-
public void HandleDisconnect()
150+
public void HandleDisconnect(bool terminate)
151151
{
152-
_debugger.Disconnect();
152+
_debugger.Disconnect(terminate);
153+
154+
var mustKill = terminate || !_attachMode;
153155

154-
if (!_attachMode && _process != null && !_process.HasExited)
156+
if (mustKill && _process != null && !_process.HasExited)
155157
{
156-
_process.Kill();
158+
if (!_process.WaitForExit(2000))
159+
_process.Kill();
157160
}
158161
}
159162

src/VSCode.DebugAdapter/OscriptDebugSession.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@ public override void Initialize(Response response, dynamic args)
3535

3636
_process = DebugeeFactory.CreateProcess(AdapterID, PathStrategy);
3737

38-
SendResponse(response, new Capabilities()
38+
SendResponse(response, new Capabilities
3939
{
4040
supportsConditionalBreakpoints = false,
4141
supportsFunctionBreakpoints = false,
4242
supportsConfigurationDoneRequest = true,
4343
exceptionBreakpointFilters = new dynamic[0],
44-
supportsEvaluateForHovers = true
44+
supportsEvaluateForHovers = true,
45+
supportTerminateDebuggee = true
4546
});
4647

4748
SendEvent(new InitializedEvent());
@@ -105,7 +106,7 @@ public override void Launch(Response response, dynamic args)
105106
}
106107
catch (Exception e)
107108
{
108-
_process.HandleDisconnect();
109+
_process.HandleDisconnect(true);
109110
_process = null;
110111
SessionLog.WriteLine(e.ToString());
111112
SendErrorResponse(response, 4550, "Can't connect: " + e.ToString());
@@ -149,7 +150,14 @@ public override void Attach(Response response, dynamic arguments)
149150

150151
public override void Disconnect(Response response, dynamic arguments)
151152
{
152-
_process.HandleDisconnect();
153+
bool terminateDebuggee = arguments.terminateDebuggee == true;
154+
155+
_process.HandleDisconnect(terminateDebuggee);
156+
if (terminateDebuggee)
157+
{
158+
// Для более быстрого прерывания сессии
159+
SendEvent(new TerminatedEvent());
160+
}
153161
SendResponse(response);
154162
}
155163

src/VSCode.DebugAdapter/OscriptProtocols/Tcp/TcpDebugConnector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ public void StepOut(int threadId)
180180
WriteCommand(threadId);
181181
}
182182

183-
public void Disconnect()
183+
public void Disconnect(bool terminate)
184184
{
185-
WriteCommand(null);
185+
WriteCommand(terminate);
186186
}
187187

188188
public int[] GetThreads()

src/VSCode.DebugAdapter/OscriptProtocols/Wcf/WcfDebuggerConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public void StepOut(int threadId)
7979
_serviceProxy.Instance.StepOut(threadId);
8080
}
8181

82-
public void Disconnect()
82+
public void Disconnect(bool terminate)
8383
{
84-
_serviceProxy.Instance.Disconnect();
84+
_serviceProxy.Instance.Disconnect(terminate);
8585
}
8686

8787
public int[] GetThreads()

src/oscript/DebugServer/DebugServiceImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public virtual void StepOut(int threadId)
185185
t.ThreadEvent.Set();
186186
}
187187

188-
public void Disconnect()
188+
public void Disconnect(bool terminate)
189189
{
190190
Controller.BreakpointManager.Clear();
191191
Controller.GetAllThreadIds().ForEach(threadId =>

src/oscript/DebugServer/WCFDebugService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ public void StepOut(int threadId)
8282
_debugServiceImpl.StepOut(threadId);
8383
}
8484

85-
public void Disconnect()
85+
public void Disconnect(bool terminate)
8686
{
87-
_debugServiceImpl.Disconnect();
87+
_debugServiceImpl.Disconnect(terminate);
8888
}
8989

9090
public int[] GetThreads()

0 commit comments

Comments
 (0)