eclipse-theia/theia

Clicking "Continue" in debugger doesn't return to Running state

Open

#7,691 opened on Apr 29, 2020

View on GitHub
 (1 comment) (0 reactions) (0 assignees)TypeScript (18,676 stars) (2,478 forks)batch import
bugdartdebughelp wanted

Description

I'm debugging an issue when running Flutter apps - when I resume from a breakpoint, the debugger UI often immediately goes back to the "paused" state so it looks like it has hit the breakpoint a second time when it hasn't.

I recorded the DAP traffic when this happens, and noticed there are stackTraceRequests also being sent immediately after resuming:


// Clicked Continue in debug side bar
[12:43:30 PM]: DAP-REQ: continueRequest: {"threadId":0}
[12:43:30 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":22,"command":"continue","success":true,"body":{"allThreadsContinued":false}}
// Debugger asks for stack traces, even though we're no longer paused
[12:43:31 PM]: DAP-REQ: stackTraceRequest: {"startFrame":0,"levels":1,"threadId":0}
[12:43:31 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":23,"command":"stackTrace","success":true,"body":{"stackFrames":[{"id":17,"source":{"name":"package:gitpod_flutter_web/main.dart","path":"/workspace/gitpod-flutter-web/lib/main.dart","sourceReference":0,"adapterData":{"type":"@Script","id":"353","uri":"package:gitpod_flutter_web/main.dart"}},"line":56,"column":7,"name":"<closure>"}],"totalFrames":15}}
[12:43:31 PM]: DAP-REQ: stackTraceRequest: {"startFrame":1,"levels":19,"threadId":0}
[12:43:31 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":24,"command":"stackTrace","success":false,"message":"-32603 Bad state: Invalid null response from service\n#0      VmServerConnection._delegateRequest (package:vm_service/src/vm_service.dart:1475:9)\n<asynchronous suspension>\n#1      _rootRunUnary (dart:async/zone.dart:1192:38)\n#2      _CustomZone.runUnary (dart:async/zone.dart:1085:19)\n#3      _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)\n#4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)\n#5      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)\n#6      _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:134:11)\n#7      _MapStream._handleData (dart:async/stream_pipe.dart:234:10)\n#8      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:166:13)\n#9      _rootRunUnary (dart:async/zone.dart:1192:38)\n#10     _CustomZone.runUnary (dart:async/zone.dart:1085:19)\n#11     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)\n#12     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)\n#13     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)\n#14     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:779:19)\n#15     _StreamController._add (dart:async/stream_controller.dart:655:7)\n#16     _StreamController.add (dart:async/stream_controller.dart:597:5)\n#17     new WebSocketImpl.fromSocket.<anonymous closure> (package:web_socket_channel/src/copy/web_socket_impl.dart:719:21)\n#18     _rootRunUnary (dart:async/zone.dart:1192:38)\n#19     _CustomZone.runUnary (dart:async/zone.dart:1085:19)\n#20     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)\n#21     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)\n#22     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)\n#23     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:7…
[12:43:31 PM]: DAP-REQ: scopesRequest: {"frameId":17}
[12:43:31 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":25,"command":"scopes","success":true,"body":{"scopes":[{"name":"Locals","variablesReference":18,"expensive":false}]}}
[12:44:29 PM]: DAP-REQ: stackTraceRequest: {"startFrame":0,"levels":1,"threadId":0}
[12:44:29 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":26,"command":"stackTrace","success":false,"message":"No thread with id 0"}
[12:44:29 PM]: DAP-REQ: stackTraceRequest: {"startFrame":0,"levels":19,"threadId":0}
[12:44:29 PM]: DAP-RESP: {"seq":0,"type":"response","request_seq":27,"command":"stackTrace","success":false,"message":"No thread with id 0"}

I don't know whether the stackTraceRequests are causing the UI to go back to looking like it's paused, or whether the debugger thinks it's not paused which is why it's sending stackTraceRequests, but this seems unexpected.

Contributor guide