Skip to content
This repository was archived by the owner on Aug 28, 2020. It is now read-only.

Commit 014924c

Browse files
committed
Merge pull request #120 from robertbasic/fix/issue117
Fix/issue117. Fixes #117 and fixes #9
2 parents 28eb68c + 0b2bf44 commit 014924c

File tree

2 files changed

+67
-42
lines changed

2 files changed

+67
-42
lines changed

pugdebug/debugger.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ def connect_server_signals(self):
6464
self.server.server_stopped_signal.connect(
6565
self.handle_server_stopped
6666
)
67+
self.server.server_error_signal.connect(
68+
self.handle_server_error
69+
)
6770

6871
def connect_connection_signals(self, connection):
6972
"""Connect signals for a new connection
@@ -119,6 +122,11 @@ def connect_connection_signals(self, connection):
119122
self.handle_expressions_evaluated
120123
)
121124

125+
# Error signals
126+
connection.connection_error_signal.connect(
127+
self.handle_connection_error
128+
)
129+
122130
def cleanup(self):
123131
"""Cleanup debugger when it's done
124132
@@ -309,6 +317,17 @@ def handle_expressions_evaluated(self, results):
309317
"""Handle when server evaluates a list of expressions"""
310318
self.expressions_evaluated_signal.emit(results)
311319

320+
def handle_server_error(self, error):
321+
self.error_signal.emit(error)
322+
323+
def handle_connection_error(self, action, error):
324+
error = error + " during %s action" % action
325+
self.error_signal.emit(error)
326+
327+
# The current connection is FUBAR so just set it to None
328+
self.current_connection = None
329+
self.stop_debug()
330+
312331
def get_current_file(self):
313332
if 'filename' in self.step_result:
314333
self.current_file = self.step_result['filename']

pugdebug/server.py

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ class PugdebugServerConnection(QThread):
119119
expression_evaluated_signal = pyqtSignal(int, dict)
120120
expressions_evaluated_signal = pyqtSignal(list)
121121

122+
connection_error_signal = pyqtSignal(str, str)
123+
122124
def __init__(self, socket):
123125
super(PugdebugServerConnection, self).__init__()
124126

@@ -179,48 +181,52 @@ def run(self):
179181
data = self.data
180182
action = self.action
181183

182-
if action == 'stop':
183-
response = self.__stop()
184-
self.stopped_signal.emit()
185-
elif action == 'detach':
186-
response = self.__detach()
187-
self.detached_signal.emit()
188-
elif action == 'step_run':
189-
response = self.__step_run()
190-
self.stepped_signal.emit(response)
191-
elif action == 'step_into':
192-
response = self.__step_into()
193-
self.stepped_signal.emit(response)
194-
elif action == 'step_over':
195-
response = self.__step_over()
196-
self.stepped_signal.emit(response)
197-
elif action == 'step_out':
198-
response = self.__step_out()
199-
self.stepped_signal.emit(response)
200-
elif action == 'post_step':
201-
response = self.__post_step(data)
202-
203-
self.got_variables_signal.emit(response['variables'])
204-
self.got_stacktraces_signal.emit(response['stacktraces'])
205-
self.expressions_evaluated_signal.emit(
206-
response['expressions']
207-
)
208-
elif action == 'init_breakpoint_set':
209-
response = self.__set_init_breakpoints(data)
210-
self.set_init_breakpoints_signal.emit(response)
211-
elif action == 'breakpoint_set':
212-
response = self.__set_breakpoint(data)
213-
self.set_breakpoint_signal.emit(response)
214-
elif action == 'breakpoint_remove':
215-
response = self.__remove_breakpoint(data)
216-
self.removed_breakpoint_signal.emit(response)
217-
elif action == 'breakpoint_list':
218-
response = self.__list_breakpoints()
219-
self.listed_breakpoints_signal.emit(response)
220-
elif action == 'evaluate_expression':
221-
(index, expression) = data
222-
response = self.__evaluate_expression(expression)
223-
self.expression_evaluated_signal.emit(index, response)
184+
try:
185+
if action == 'stop':
186+
response = self.__stop()
187+
self.stopped_signal.emit()
188+
elif action == 'detach':
189+
response = self.__detach()
190+
self.detached_signal.emit()
191+
elif action == 'step_run':
192+
response = self.__step_run()
193+
self.stepped_signal.emit(response)
194+
elif action == 'step_into':
195+
response = self.__step_into()
196+
self.stepped_signal.emit(response)
197+
elif action == 'step_over':
198+
response = self.__step_over()
199+
self.stepped_signal.emit(response)
200+
elif action == 'step_out':
201+
response = self.__step_out()
202+
self.stepped_signal.emit(response)
203+
elif action == 'post_step':
204+
response = self.__post_step(data)
205+
206+
self.got_variables_signal.emit(response['variables'])
207+
self.got_stacktraces_signal.emit(response['stacktraces'])
208+
self.expressions_evaluated_signal.emit(
209+
response['expressions']
210+
)
211+
elif action == 'init_breakpoint_set':
212+
response = self.__set_init_breakpoints(data)
213+
self.set_init_breakpoints_signal.emit(response)
214+
elif action == 'breakpoint_set':
215+
response = self.__set_breakpoint(data)
216+
self.set_breakpoint_signal.emit(response)
217+
elif action == 'breakpoint_remove':
218+
response = self.__remove_breakpoint(data)
219+
self.removed_breakpoint_signal.emit(response)
220+
elif action == 'breakpoint_list':
221+
response = self.__list_breakpoints()
222+
self.listed_breakpoints_signal.emit(response)
223+
elif action == 'evaluate_expression':
224+
(index, expression) = data
225+
response = self.__evaluate_expression(expression)
226+
self.expression_evaluated_signal.emit(index, response)
227+
except OSError as error:
228+
self.disconnect()
229+
self.connection_error_signal.emit(action, error.strerror)
224230

225231
self.mutex.unlock()
226232

0 commit comments

Comments
 (0)