Skip to content

Debugger commands sent to terminal get swallowed by previous terminal command #67692

@DonJayamanne

Description

@DonJayamanne
  • VSCode Version:Version 1.31.0-insider (1.31.0-insider)
  • OS Version:Mac

Steps to Reproduce:

  • Install latest version of Python Extension
  • Install python
  • Brew install pipenv
  • Open a folder in VSC
  • Add a python file with a simple print("Hello") statement
  • Open the terminal in VSC and type the command pipenv shell
    • This will create a virtual environment for the current folder
  • Open another terminal and notice how the Python extension will automatically add pipenv shell, causing the previously created environment to get activated in this new terminal.
  • Reload VSC
    • The above pipenv environment will now be automatically selected
    • If not, please use the command Select Python Interpreter
    • From the list, of interpreters select the interpreter with the name same as the folder name you are in.
  • Debug the python file
    • The terminal will now open automatically
    • Python Extension will send the text pipenv shell to activate the environment in the terminal
    • VSC Debugger sends the necessary commands to the terminal
    • Unfortunately there's a race condition here, pipenv shell has not yet completed, and the commands sent by VSC debugger get swallowed up
  • End result, debugger doesn't start

Causes:

  • There's no way to determine when terminal has completed processing previously sent commands.
  • VSC is sending messages to the terminal, when its busy

Solutions:

  1. Python extension can take complete control of opening terminals, etc and not use runInTerminal request (i.e. python extension re-invent the wheel).
  2. VSC DAP accepts additional commands that need to be invokved in the runInTerminal request.
    Currently we can only send args, how about extending this to send commands as well.
    This way the extension can send some custom commands that need to be executed before the VSC debugger commands. I.e. chain them together.

Metadata

Metadata

Assignees

Labels

*as-designedDescribed behavior is as designeddebugDebug viewlet, configurations, breakpoints, adapter issues

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions