Piping the debug output to sublime console
This commit is contained in:
@@ -39,25 +39,4 @@
|
||||
"caption": "RemedyBG: All in one, this is for the convienient mouse + keyboard usage",
|
||||
"command": "remedy_all_in_one",
|
||||
},
|
||||
{
|
||||
"caption": "RemedyBG: Build and run to cursor, requires a project",
|
||||
"command": "remedy_build",
|
||||
"args": {
|
||||
"command": "run_to_cursor"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "RemedyBG: Build and start debugging, requires a project",
|
||||
"command": "remedy_build",
|
||||
"args": {
|
||||
"command": "start_debugging"
|
||||
}
|
||||
},
|
||||
{
|
||||
"caption": "RemedyBG: Build and goto cursor, requires a project",
|
||||
"command": "remedy_build",
|
||||
"args": {
|
||||
"command": "goto_cursor"
|
||||
}
|
||||
},
|
||||
]
|
||||
@@ -10,4 +10,5 @@
|
||||
"executable": "remedybg.exe",
|
||||
"vc_vars_cmd": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/Build/vcvarsall.bat",
|
||||
"vc_vars_arch": "amd64",
|
||||
"output_debug_strings_to_console": true,
|
||||
}
|
||||
65
remedy.py
65
remedy.py
@@ -21,6 +21,7 @@ class RemedyInstance:
|
||||
self.process = None
|
||||
self.servername = ""
|
||||
self.breakpoints = {}
|
||||
self.settings = sublime.load_settings("Remedy.sublime-settings")
|
||||
|
||||
def begin_command(self, cmd):
|
||||
cmd_buffer = io.BytesIO()
|
||||
@@ -281,15 +282,37 @@ class RemedyInstance:
|
||||
self.close()
|
||||
return
|
||||
if self.process and self.event_pipe:
|
||||
try:
|
||||
buffer, nbytes, result = win32pipe.PeekNamedPipe(self.event_pipe, 0)
|
||||
if nbytes:
|
||||
hr, data = win32file.ReadFile(self.event_pipe, nbytes, None)
|
||||
event_buffer = io.BytesIO(data)
|
||||
event_type = int.from_bytes(event_buffer.read(2), 'little')
|
||||
event_buffer, event_type = self.get_event()
|
||||
self.process_event(event_buffer, event_type)
|
||||
|
||||
sublime.set_timeout(update, 100)
|
||||
#update() end
|
||||
|
||||
sublime.set_timeout(update, 100)
|
||||
except FileNotFoundError as not_found:
|
||||
sublime.error_message("RemedyBG: " + str(not_found) + ': ' + target)
|
||||
except pywintypes.error as connection_error:
|
||||
sublime.error_message("RemedyBG: " + str(connection_error))
|
||||
except OSError as os_error:
|
||||
sublime.error_message("RemedyBG: " + str(os_error))
|
||||
|
||||
def process_event(self, event_buffer, event_type):
|
||||
if event_type == EVENTTYPE_EXIT_PROCESS:
|
||||
exit_code = int.from_bytes(event_buffer.read(4), 'little')
|
||||
print('RemedyBG: Debugging terminated with exit code:', exit_code)
|
||||
elif event_type == EVENTTYPE_OUTPUT_DEBUG_STRING and self.settings.get("output_debug_strings_to_console", False):
|
||||
text = event_buffer.read(int.from_bytes(event_buffer.read(2), 'little')).decode('utf-8')
|
||||
print(text.strip())
|
||||
i = 0
|
||||
while i < 3000:
|
||||
i += 1
|
||||
event_buffer, event_type = self.get_event()
|
||||
if event_type == EVENTTYPE_OUTPUT_DEBUG_STRING:
|
||||
text = event_buffer.read(int.from_bytes(event_buffer.read(2), 'little')).decode('utf-8')
|
||||
print(text.strip())
|
||||
else:
|
||||
self.process_event(event_buffer, event_type)
|
||||
break
|
||||
elif event_type == EVENTTYPE_BREAKPOINT_ADDED: # @todo: The problem here is that we need to figure out a view to which the marker is going to be bound
|
||||
pass
|
||||
# bp_id = int.from_bytes(event_buffer.read(4), 'little')
|
||||
@@ -308,19 +331,20 @@ class RemedyInstance:
|
||||
v = self.breakpoints[key]
|
||||
v["view"].erase_regions(key)
|
||||
self.breakpoints.pop(key)
|
||||
|
||||
def get_event(self):
|
||||
try:
|
||||
buffer, nbytes, result = win32pipe.PeekNamedPipe(self.event_pipe, 0)
|
||||
if nbytes:
|
||||
hr, data = win32file.ReadFile(self.event_pipe, nbytes, None)
|
||||
event_buffer = io.BytesIO(data)
|
||||
event_type = int.from_bytes(event_buffer.read(2), 'little')
|
||||
return event_buffer, event_type
|
||||
return None, None
|
||||
except win32api.error as pipe_error:
|
||||
print('RemedyBG: Error occured while trying to update, we got disconnected:', pipe_error)
|
||||
self.close()
|
||||
return
|
||||
|
||||
sublime.set_timeout(update, 1000)
|
||||
sublime.set_timeout(update, 1000)
|
||||
except FileNotFoundError as not_found:
|
||||
sublime.error_message("RemedyBG: " + str(not_found) + ': ' + target)
|
||||
except pywintypes.error as connection_error:
|
||||
sublime.error_message("RemedyBG: " + str(connection_error))
|
||||
except OSError as os_error:
|
||||
sublime.error_message("RemedyBG: " + str(os_error))
|
||||
return None, None
|
||||
|
||||
def filename_and_line():
|
||||
window = sublime.active_window()
|
||||
@@ -347,8 +371,7 @@ remedy_instance = RemedyInstance()
|
||||
|
||||
def get_remedy_executable():
|
||||
window = sublime.active_window()
|
||||
settings = sublime.load_settings("Remedy.sublime-settings")
|
||||
result = settings.get("executable", "remedybg")
|
||||
result = remedy_instance.settings.get("executable", "remedybg")
|
||||
return result
|
||||
|
||||
def get_build_system(window):
|
||||
@@ -376,8 +399,7 @@ def get_build_system(window):
|
||||
return project, build
|
||||
|
||||
def should_build_before_debugging(window):
|
||||
settings = sublime.load_settings("Remedy.sublime-settings")
|
||||
build_before = settings.get("build_before_debugging", False)
|
||||
build_before = remedy_instance.settings.get("build_before_debugging", False)
|
||||
if build_before:
|
||||
project, build = get_build_system(window)
|
||||
if project == None or build == None:
|
||||
@@ -555,8 +577,7 @@ class RemedyAllInOneCommand(sublime_plugin.TextCommand):
|
||||
class RemedyOnBuildCommand(sublime_plugin.EventListener):
|
||||
def on_window_command(self, window, command_name, args):
|
||||
if command_name in ["build", "remedy_build"]:
|
||||
settings = sublime.load_settings("Remedy.sublime-settings")
|
||||
if settings.get("stop_debugging_on_build_command", False):
|
||||
if remedy_instance.settings.get("stop_debugging_on_build_command", False):
|
||||
remedy_instance.stop_debugging()
|
||||
|
||||
def plugin_unloaded():
|
||||
|
||||
Reference in New Issue
Block a user