From 6e359c748301e1b97e1d03663efc96d03d1f0ee7 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 4 Apr 2018 14:36:01 -0700 Subject: [PATCH 1/5] Fixes an issue with missing frozen frames --- ptvsd/wrapper.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index d12bb617..10d26b9c 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -986,7 +986,13 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): # TODO: docstring cmd = pydevd_comm.CMD_LIST_THREADS _, _, resp_args = yield self.pydevd_request(cmd, '') - xml = self.parse_xml_response(resp_args) + + try: + xml = self.parse_xml_response(resp_args) + except Exception: + self.send_response(request, success=False) + return + try: xthreads = xml.thread except AttributeError: @@ -1121,7 +1127,12 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): with (yield self.using_format(fmt)): _, _, resp_args = yield self.pydevd_request(cmd, msg) - xml = self.parse_xml_response(resp_args) + try: + xml = self.parse_xml_response(resp_args) + except Exception: + self.send_response(request, success=False) + return + try: xvars = xml.var except AttributeError: @@ -1232,8 +1243,12 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): '\t'.join(cmd_args), ) - xml = self.parse_xml_response(resp_args) - xvar = xml.var + try: + xml = self.parse_xml_response(resp_args) + xvar = xml.var + except Exception: + self.send_response(request, success=False) + return response = { 'type': unquote(xvar['type']), @@ -1261,8 +1276,12 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): _, _, resp_args = yield self.pydevd_request( pydevd_comm.CMD_EVALUATE_EXPRESSION, msg) - xml = self.parse_xml_response(resp_args) - xvar = xml.var + try: + xml = self.parse_xml_response(resp_args) + xvar = xml.var + except Exception: + self.send_response(request, success=False) + return context = args.get('context', '') is_eval_error = xvar['isErrorOnEval'] @@ -1538,7 +1557,6 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): self.is_process_created = True self.send_process_event(self.start_reason) - # TODO: docstring xml = self.parse_xml_response(args) try: name = unquote(xml.thread['name']) From e975377da8dd92ed4bdc9920de0a1be6da2d36e0 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 4 Apr 2018 18:44:46 -0700 Subject: [PATCH 2/5] Changing from Exception to SAXParseException for XML parse errors --- ptvsd/wrapper.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index 10d26b9c..0da076ee 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -21,6 +21,7 @@ try: except Exception: import urllib.parse as urllib import warnings +from xml.sax import SAXParseException import _pydevd_bundle.pydevd_constants as pydevd_constants # Disable this, since we aren't packaging the Cython modules at the moment. @@ -989,7 +990,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) - except Exception: + except SAXParseException: self.send_response(request, success=False) return @@ -1129,7 +1130,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) - except Exception: + except SAXParseException: self.send_response(request, success=False) return @@ -1245,8 +1246,13 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) + except SAXParseException: + self.send_response(request, success=False) + return + + try: xvar = xml.var - except Exception: + except AttributeError: self.send_response(request, success=False) return @@ -1278,8 +1284,13 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): msg) try: xml = self.parse_xml_response(resp_args) + except SAXParseException: + self.send_response(request, success=False) + return + + try: xvar = xml.var - except Exception: + except AttributeError: self.send_response(request, success=False) return From 984282dc5370a7b3f10ab2cd81fbf67d493de622 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 4 Apr 2018 19:24:41 -0700 Subject: [PATCH 3/5] Return parse exception message --- ptvsd/wrapper.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index 0da076ee..09de6ae8 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -990,8 +990,11 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) - except SAXParseException: - self.send_response(request, success=False) + except SAXParseException as ex: + self.send_response( + request, + success=False, + message=ex.getMessage()) return try: @@ -1130,8 +1133,11 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) - except SAXParseException: - self.send_response(request, success=False) + except SAXParseException as ex: + self.send_response( + request, + success=False, + message=ex.getMessage()) return try: @@ -1246,8 +1252,11 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) - except SAXParseException: - self.send_response(request, success=False) + except SAXParseException as ex: + self.send_response( + request, + success=False, + message=ex.getMessage()) return try: @@ -1284,8 +1293,11 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): msg) try: xml = self.parse_xml_response(resp_args) - except SAXParseException: - self.send_response(request, success=False) + except SAXParseException as ex: + self.send_response( + request, + success=False, + message=ex.getMessage()) return try: From ec1db425b11303a7cfb904c52da175ea433d3d74 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 4 Apr 2018 21:04:36 -0700 Subject: [PATCH 4/5] Add send_error_response method --- ptvsd/wrapper.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index 09de6ae8..1e9f7205 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -974,6 +974,13 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): } self.send_event('process', **evt) + def send_error_response(self, request, message=None): + self.send_response( + request, + success=False, + message=message + ) + def is_debugger_internal_thread(self, thread_name): if thread_name: if thread_name.startswith('pydevd.'): @@ -991,9 +998,8 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_response( + self.send_error_response( request, - success=False, message=ex.getMessage()) return @@ -1134,9 +1140,8 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_response( + self.send_error_response( request, - success=False, message=ex.getMessage()) return @@ -1253,9 +1258,8 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_response( + self.send_error_response( request, - success=False, message=ex.getMessage()) return @@ -1291,15 +1295,15 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): _, _, resp_args = yield self.pydevd_request( pydevd_comm.CMD_EVALUATE_EXPRESSION, msg) + try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_response( + self.send_error_response( request, - success=False, message=ex.getMessage()) return - + try: xvar = xml.var except AttributeError: From 0a67e47c3eacdf490c2470cf792580aa56e20a89 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Wed, 4 Apr 2018 21:14:23 -0700 Subject: [PATCH 5/5] Remove message sent back for XML parse errors. --- ptvsd/wrapper.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/ptvsd/wrapper.py b/ptvsd/wrapper.py index 1e9f7205..853ddd14 100644 --- a/ptvsd/wrapper.py +++ b/ptvsd/wrapper.py @@ -998,9 +998,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_error_response( - request, - message=ex.getMessage()) + self.send_error_response(request) return try: @@ -1140,9 +1138,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_error_response( - request, - message=ex.getMessage()) + self.send_error_response(request) return try: @@ -1258,9 +1254,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_error_response( - request, - message=ex.getMessage()) + self.send_error_response(request) return try: @@ -1299,9 +1293,7 @@ class VSCodeMessageProcessor(ipcjson.SocketIO, ipcjson.IpcChannel): try: xml = self.parse_xml_response(resp_args) except SAXParseException as ex: - self.send_error_response( - request, - message=ex.getMessage()) + self.send_error_response(request) return try: