Browse Source

logging: log exceptions caught by crash reporter

regtest_lnd
SomberNight 6 years ago
parent
commit
163a814dc4
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 7
      electrum/gui/kivy/uix/dialogs/crash_reporter.py
  2. 11
      electrum/gui/qt/exception_window.py

7
electrum/gui/kivy/uix/dialogs/crash_reporter.py

@ -13,6 +13,7 @@ from kivy.utils import platform
from electrum.gui.kivy.i18n import _
from electrum.base_crash_reporter import BaseCrashReporter
from electrum.logging import Logger
Builder.load_string('''
@ -172,9 +173,10 @@ class CrashReportDetails(Factory.Popup):
print(text)
class ExceptionHook(base.ExceptionHandler):
class ExceptionHook(base.ExceptionHandler, Logger):
def __init__(self, main_window):
super().__init__()
base.ExceptionHandler.__init__(self)
Logger.__init__(self)
self.main_window = main_window
if not main_window.electrum_config.get(BaseCrashReporter.config_key, default=True):
return
@ -185,6 +187,7 @@ class ExceptionHook(base.ExceptionHandler):
def handle_exception(self, _inst):
exc_info = sys.exc_info()
self.logger.error('exception caught by crash reporter', exc_info=exc_info)
# Check if this is an exception from within the exception handler:
import traceback
for item in traceback.extract_tb(exc_info[2]):

11
electrum/gui/qt/exception_window.py

@ -108,7 +108,6 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin, Logger):
def on_close(self):
Exception_Window._active_window = None
sys.__excepthook__(*self.exc_args)
self.close()
def show_never(self):
@ -134,16 +133,18 @@ def _show_window(*args):
Exception_Window._active_window = Exception_Window(*args)
class Exception_Hook(QObject):
class Exception_Hook(QObject, Logger):
_report_exception = QtCore.pyqtSignal(object, object, object, object)
def __init__(self, main_window, *args, **kwargs):
super(Exception_Hook, self).__init__(*args, **kwargs)
QObject.__init__(self, *args, **kwargs)
Logger.__init__(self)
if not main_window.config.get(BaseCrashReporter.config_key, default=True):
return
self.main_window = main_window
sys.excepthook = self.handler
self._report_exception.connect(_show_window)
def handler(self, *args):
self._report_exception.emit(self.main_window, *args)
def handler(self, *exc_info):
self.logger.error('exception caught by crash reporter', exc_info=exc_info)
self._report_exception.emit(self.main_window, *exc_info)

Loading…
Cancel
Save