diff --git a/src/ddebug/common/debugger.d b/src/ddebug/common/debugger.d index b35b1f1..0b72407 100644 --- a/src/ddebug/common/debugger.d +++ b/src/ddebug/common/debugger.d @@ -33,6 +33,16 @@ interface Debugger : ProgramExecution { void execStart(); /// continue execution void execContinue(); + /// stop program execution + void execStop(); + /// interrupt execution + void execPause(); + /// step over + void execStepOver(); + /// step in + void execStepIn(); + /// step out + void execStepOut(); } enum ResponseCode : int { @@ -143,6 +153,26 @@ class DebuggerProxy : Debugger, DebuggerCallback { void execContinue() { _debugger.postRequest(delegate() { _debugger.execContinue(); }); } + /// stop program execution + void execStop() { + _debugger.postRequest(delegate() { _debugger.execStop(); }); + } + /// interrupt execution + void execPause() { + _debugger.postRequest(delegate() { _debugger.execPause(); }); + } + /// step over + void execStepOver() { + _debugger.postRequest(delegate() { _debugger.execStepOver(); }); + } + /// step in + void execStepIn() { + _debugger.postRequest(delegate() { _debugger.execStepIn(); }); + } + /// step out + void execStepOut() { + _debugger.postRequest(delegate() { _debugger.execStepOut(); }); + } } abstract class DebuggerBase : Thread, Debugger { diff --git a/src/ddebug/gdb/gdbinterface.d b/src/ddebug/gdb/gdbinterface.d index 84a575a..530d0d0 100644 --- a/src/ddebug/gdb/gdbinterface.d +++ b/src/ddebug/gdb/gdbinterface.d @@ -229,6 +229,9 @@ class GDBInterface : ConsoleDebuggerInterface { if (_stopRequested) return; Log.d("GDBInterface.stop()"); + postRequest(delegate() { + execStop(); + }); _stopRequested = true; postRequest(delegate() { }); @@ -251,6 +254,32 @@ class GDBInterface : ConsoleDebuggerInterface { _continueRequestId = sendCommand("-exec-continue"); } + /// stop program execution + int _stopRequestId; + void execStop() { + _continueRequestId = sendCommand("-gdb-exit"); + } + /// interrupt execution + int _pauseRequestId; + void execPause() { + _pauseRequestId = sendCommand("-exec-interrupt"); + } + /// step over + int _stepOverRequestId; + void execStepOver() { + _stepOverRequestId = sendCommand("-exec-next"); + } + /// step in + int _stepInRequestId; + void execStepIn() { + _stepInRequestId = sendCommand("-exec-step"); + } + /// step out + int _stepOutRequestId; + void execStepOut() { + _stepOutRequestId = sendCommand("-exec-finish"); + } + // ~message void handleStreamLineCLI(string s) { Log.d("GDB CLI: ", s);