Add start_debugging / resume_execution

This commit is contained in:
Krzosa Karol
2023-01-22 19:35:51 +01:00
parent 0deed86537
commit 63dcf9bedc
3 changed files with 27 additions and 27 deletions

View File

@@ -15,6 +15,10 @@
"caption": "RemedyBG: Stop debugging",
"command": "remedy_stop_debugging",
},
{
"caption": "RemedyBG: Set breakpoint",
"command": "remedy_set_breakpoint",
},
{
"caption": "RemedyBG: Run to cursor, launch and stop at cursor",
"command": "remedy_run_to_cursor",

View File

@@ -2,6 +2,7 @@
{ "keys": ["ctrl+f10"], "command": "remedy_run_to_cursor" },
{ "keys": ["f5"], "command": "remedy_start_debugging" },
{ "keys": ["shift+f5"], "command": "remedy_stop_debugging" },
{ "keys": ["f9"], "command": "remedy_set_breakpoint" },
{ "keys": ["ctrl+shift+f5"], "command": "remedy_restart_debugging" },
{ "keys": ["ctrl+t"], "command": "remedy_all_in_one" },
]

View File

@@ -32,15 +32,6 @@ class RemedyInstance:
cmd_buffer.write(bytes(filepath, 'utf-8'))
cmd_buffer.write(ctypes.c_uint32(cmd_args['line']))
cmd_buffer.write(ctypes.c_uint16(0))
elif cmd == COMMAND_DELETE_BREAKPOINT:
if cmd_args['id'] in self.breakpoints:
rdbg_id = self.breakpoints[cmd_args['id']]
cmd_buffer.write(ctypes.c_uint32(rdbg_id))
self.breakpoints.pop(cmd_args['id'])
if rdbg_id in self.breakpoints_rdbg:
self.breakpoints_rdbg.pop(rdbg_id)
else:
return 0
elif cmd == COMMAND_GOTO_FILE_AT_LINE:
filepath = cmd_args['filename']
cmd_buffer.write(ctypes.c_uint16(len(filepath)))
@@ -74,11 +65,6 @@ class RemedyInstance:
cmd_buffer.write(ctypes.c_uint16(len(expr)))
cmd_buffer.write(bytes(expr, 'utf-8'))
cmd_buffer.write(ctypes.c_uint16(0))
elif cmd == COMMAND_UPDATE_BREAKPOINT_LINE:
if cmd_args['id'] in self.breakpoints:
rdbg_id = self.breakpoints[cmd_args['id']]
cmd_buffer.write(ctypes.c_uint32(rdbg_id))
cmd_buffer.write(ctypes.c_uint32(cmd_args['line']))
elif cmd == COMMAND_SET_WINDOW_POS:
cmd_buffer.write(ctypes.c_int32(cmd_args['x']))
cmd_buffer.write(ctypes.c_int32(cmd_args['y']))
@@ -94,7 +80,7 @@ class RemedyInstance:
try:
out_data = win32pipe.TransactNamedPipe(self.cmd_pipe, cmd_buffer.getvalue(), 8192, None)
except pywintypes.error as pipe_error:
print('RDBG', pipe_error)
print('RemedyBG: ', pipe_error)
self.close(stop=False)
return 0
@@ -102,16 +88,8 @@ class RemedyInstance:
result_code = int.from_bytes(out_buffer.read(2), 'little')
if result_code == 1:
if cmd == COMMAND_ADD_BREAKPOINT_AT_FILENAME_LINE:
bp_id = int.from_bytes(out_buffer.read(4), 'little')
return 0
# bp_id = int.from_bytes(out_buffer.read(4), 'little')
# if bp_id not in self.breakpoints_rdbg:
# self.breakpoints[cmd_args['id']] = bp_id
# self.breakpoints_rdbg[bp_id] = (cmd_args['id'], cmd_args['filename'], cmd_args['line'])
# else:
# print('RDBG: Breakpoint (%i) %s@%i skipped, because it will not get triggered' % (cmd_args['id'], cmd_args['filename'], cmd_args['line']))
# self.ignore_next_remove_breakpoint = True
# Editor.RemoveBreakpointById(cmd_args['id'])
# return bp_id
elif cmd == COMMAND_GET_TARGET_STATE:
return int.from_bytes(out_buffer.read(2), 'little')
elif cmd == COMMAND_ADD_WATCH:
@@ -123,7 +101,7 @@ class RemedyInstance:
h = int.from_bytes(out_buffer.read(4), 'little')
return (x, y, w, h)
else:
sublime.message_dialog('RDBG: ' + str(cmd) + ' failed')
sublime.message_dialog('RemedyBG: ' + str(cmd) + ' failed')
return 0
return 1
@@ -144,7 +122,7 @@ class RemedyInstance:
self.process.kill()
self.process = None
print("RDBG: Connection closed")
print("RemedyBG: Connection closed")
def try_launching(self):
if self.process == None:
@@ -278,6 +256,12 @@ class RemedyInstance:
file = view.file_name()
self.send_command(COMMAND_GOTO_FILE_AT_LINE, filename=file, line=line)
def breakpoint_on_cursor(self):
window = sublime.active_window()
view = window.active_view()
line = view.rowcol(view.sel()[0].b)[0] + 1
file = view.file_name()
self.send_command(COMMAND_ADD_BREAKPOINT_AT_FILENAME_LINE, filename=file, line=line)
remedy_instance = RemedyInstance()
@@ -364,7 +348,13 @@ class RemedyLaunchCommand(sublime_plugin.WindowCommand):
class RemedyStartDebuggingCommand(sublime_plugin.WindowCommand):
def run(self):
if remedy_instance.try_launching(): return
state = remedy_instance.send_command(COMMAND_GET_TARGET_STATE)
if state == TARGETSTATE_NONE:
remedy_instance.send_command(COMMAND_START_DEBUGGING)
elif state == TARGETSTATE_SUSPENDED:
remedy_instance.send_command(COMMAND_CONTINUE_EXECUTION)
class RemedyStopDebuggingCommand(sublime_plugin.WindowCommand):
def run(self):
@@ -386,6 +376,11 @@ class RemedyGotoCursorCommand(sublime_plugin.TextCommand):
if remedy_instance.try_launching(): return
remedy_instance.goto_cursor()
class RemedySetBreakpointCommand(sublime_plugin.TextCommand):
def run(self, edit):
if remedy_instance.try_launching(): return
remedy_instance.breakpoint_on_cursor()
class RemedyAddToWatchCommand(sublime_plugin.TextCommand):
def run(self, edit):
if remedy_instance.try_launching(): return