From 15c635b873105eda2861430d062ea3f6bdfe9d9b Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 1 Aug 2025 17:02:14 -0400 Subject: Use log_error_for_exception in the Python API to pass tracebacks in the stack trace associated with log messages, instead of creating large mutli-line messages for every exception --- python/scriptingprovider.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'python/scriptingprovider.py') diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 3b7747bb..41b7d8d7 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -98,26 +98,26 @@ class ScriptingOutputListener: try: self.notify_output(text) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingOutputListener._output") def _warning(self, ctxt, text): try: self.notify_warning(text) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingOutputListener._warning") def _error(self, ctxt, text): try: self.notify_error(text) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingOutputListener._error") def _input_ready_state_changed(self, ctxt, state): try: self.notify_input_ready_state_changed(state) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingOutputListener._input_ready_state_changed") def notify_output(self, text): pass @@ -167,40 +167,40 @@ class ScriptingInstance: try: self.__class__._registered_instances.append(self) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._external_ref_taken") def _external_ref_released(self, ctxt): try: self.__class__._registered_instances.remove(self) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._external_ref_released") def _execute_script_input(self, ctxt, text): try: return self.perform_execute_script_input(text) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._execute_script_input") return ScriptingProviderExecuteResult.InvalidScriptInput def _execute_script_input_from_filename(self, ctxt, filename): try: return self.perform_execute_script_input_from_filename(filename) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._execute_script_input_from_filename") return ScriptingProviderExecuteResult.InvalidScriptInput def _cancel_script_input(self, ctxt): try: return self.perform_cancel_script_input() except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._cancel_script_input") return ScriptingProviderExecuteResult.ScriptExecutionCancelled def _release_binary_view(self, ctxt, view): try: binaryview.BinaryView._cache_remove(view) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._release_binary_view") def _set_current_binary_view(self, ctxt, view): try: @@ -211,7 +211,7 @@ class ScriptingInstance: view = None self.perform_set_current_binary_view(view) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._set_current_binary_view") def _set_current_function(self, ctxt, func): try: @@ -221,7 +221,7 @@ class ScriptingInstance: func = None self.perform_set_current_function(func) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._set_current_function") def _set_current_basic_block(self, ctxt, block): try: @@ -240,19 +240,19 @@ class ScriptingInstance: block = None self.perform_set_current_basic_block(block) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._set_current_basic_block") def _set_current_address(self, ctxt, addr): try: self.perform_set_current_address(addr) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._set_current_address") def _set_current_selection(self, ctxt, begin, end): try: self.perform_set_current_selection(begin, end) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._set_current_selection") def _complete_input(self, ctxt, text, state): try: @@ -260,14 +260,14 @@ class ScriptingInstance: text = text.decode("utf-8") return core.BNAllocString(self.perform_complete_input(text, state)) except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._complete_input") return core.BNAllocString("") def _stop(self, ctxt): try: self.perform_stop() except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingInstance._stop") @abc.abstractmethod def perform_execute_script_input(self, text): @@ -431,7 +431,7 @@ class ScriptingProvider(metaclass=_ScriptingProviderMetaclass): assert script_instance is not None, "core.BNNewScriptingInstanceReference returned None" return ctypes.cast(script_instance, ctypes.c_void_p).value except: - logger.log_error(traceback.format_exc()) + logger.log_error_for_exception("Unhandled Python exception in ScriptingProvider._create_instance") return None def create_instance(self) -> Optional[ScriptingInstance]: @@ -1101,9 +1101,9 @@ class PythonScriptingProvider(ScriptingProvider): __import__(module) return True except KeyError: - logger.log_error(f"Failed to find python plugin: {repo_path}/{module}") + logger.log_error_for_exception(f"Failed to find python plugin: {repo_path}/{module}") except ImportError as ie: - logger.log_error(f"Failed to import python plugin: {repo_path}/{module}: {ie}") + logger.log_error_for_exception(f"Failed to import python plugin: {repo_path}/{module}: {ie}") except binaryninja.UIPluginInHeadlessError: logger.log_info(f"Ignored python UI plugin: {repo_path}/{module}") return False -- cgit v1.3.1