Repository navigation
Using "request": "launch" item in launch.json for debugging does not send pathMappings #3568
Description
Ghislain LE MEUR (@gigi206) commented on Mon Oct 29 2018
Environment data
- PTVSD version: 4.1.4
- OS and version: Windows with msys2
- Python version : 3.6.6
Issue
I use VSCode with extension ms-python.python-2018.9.1 and I use python under msys2 (cygwin like) :
$ python
Python 3.6.6 (default, Jun 28 2018, 10:27:26)
[GCC 7.3.0] on msys
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.platform
'msys'
>>>
When I try to debug a python file I have the following message :
pydev debugger: warning: trying to add breakpoint to file that does not exist: /:\Users\gigi\Desktop\python\gigix.py (will have no effect)
From pydevd_file_utils.py file, if I replace L231 by the following line, it works :
real_path = subprocess.getoutput("cygpath -a '{}'".format(filename))
I opened this issue (fabioz/PyDev.Debugger#125) but it seems that it should open here...
Is it possible to add a test to determine the path under cygwin / msys2 ?
Karthik Nadig (@karthiknadig) commented on Thu Nov 01 2018
Can you give the launch configuration you are using for this?
Ghislain LE MEUR (@gigi206) commented on Fri Nov 02 2018
I use the default configuration :
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost"
},
{
"name": "Python: Module",
"type": "python",
"request": "launch",
"module": "enter-your-module-name-here",
"console": "integratedTerminal"
},
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"console": "integratedTerminal",
"args": [
"runserver",
"--noreload",
"--nothreading"
],
"django": true
},
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"jinja": true
},
{
"name": "Python: Current File (External Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "externalTerminal"
}
]
}When I select Python: Current File (Integrated Terminal) and I start the debug, it works but I have the following message :
PS C:\Users\gigi\Desktop\python> cd 'c:\Users\gigi\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\gigi\Desktop\VSCode-Anywhere\Third-Party\MSYS2\install\usr\bin\python.exe' 'c:\Users\gigi\Desktop\VSCode-Anywhere\VSCode\extensions\ms-python.python-2018.9.1\pythonFiles\experimental\ptvsd_launcher.py' '49689' 'c:\Users\gigi\Desktop\python\gigix.py'
pydev debugger: warning: trying to add breakpoint to file that does not exist: /:\Users\gigi\Desktop\python\gigix.py (will have no effect)
If I use the following Python code :
import ptvsd
ptvsd.enable_attach()
ptvsd.wait_for_attach()
...I start my python program and my program pause and listen to port 5678 :
TCP 0.0.0.0:5678 0.0.0.0:0 LISTENING
When I click on Python: Attach, my program finish with the following message :
pydev debugger: warning: trying to add breakpoint to file that does not exist: /:/Users/gigi/Desktop/python/gigix.py (will have no effect)
If I replace the line 231 like explain above, it works.
Fabio Zadrozny (@fabioz) commented on Fri Nov 02 2018
Karthik Nadig (@karthiknadig) this is actually a feature request (support cygwin in the debugger) -- the first fix needed is dealing with cygpaths as Ghislain LE MEUR (@gigi206) pointed, but there may be more to it (as a note, when/if cygwin support is added, we should also make sure there's a worker to test it in the ci).
Karthik Nadig (@karthiknadig) commented on Fri Nov 02 2018
I see. It might be worth a shot to try 'Attach' with pathMappings.
Ghislain LE MEUR (@gigi206) Add the following to your launch configuration. You may have to tweak the paths for this to work:
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "<set this value>"
}
]
},
Ghislain LE MEUR (@gigi206) commented on Fri Nov 02 2018
I have modified my launch.json file to :
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/c/Users/gigi/Desktop/python/"
}
]It seems to work with attach request type but pathMappings seems not be allowed with launch request type.
I have the message pydev debugger: warning: trying to add breakpoint to file that does not exist: /:\Users\gigi\Desktop\python\gigix.py (will have no effect) with launch request type but it works.
Karthik Nadig (@karthiknadig) commented on Fri Nov 02 2018
Don Jayamanne (@DonJayamanne) Does 'launch' support pathMappings? On the debugger side we handle pathMappings for both launch and attach.
Karthik Nadig (@karthiknadig) commented on Wed Dec 05 2018
Issue moved to Microsoft/vscode-python #3567 via ZenHub
Activity
DonJayamanne commentedon Dec 6, 2018
Reopening, as this relates to remote debugging.
Was too hasty in closing, apologies Derek Keeler (@d3r3kk)
[-]pydev debugger: warning: trying to add breakpoint to file that does not exist[/-][+]Using "request": "launch" item in launch.json for debugging does not send pathMappings[/+]d3r3kk commentedon Jan 15, 2019
After some very helpful descriptions from Karthik Nadig (@karthiknadig) I was able to understand what the issue is here. We send the following for
"request": "attach"debug configurations, but not for"request": "launch"configurations:This is a bit counter-intuitive perhaps that we would need to send these mappings, but this is a scenario that does indeed call for it.
Probably all that is needed is to add the same logic from
AttachConfigurationResolver::provideAttachDefaultstoLaunchConfigurationResolver::provideLaunchDefaults, near the end of the method replace:with:
(or some better-shared manner of doing so between
launch.tsandattach.ts...)38 remaining items
DonJayamanne commentedon Aug 1, 2019
Prescribed Solution
Launch should not prevent users form manually adding
pathMappings. Path mappings should not be set by default for launch, but it should not be disallowed. currently users see squiggles when they putpathMappingsin a lunch request.In multiprocess launch scenario:
pathMappings. But if users provide it that we should use that one.pathMappingsmust be included in theattachrequest, if one was not provided with the parent'slaunchrequest. The generated path mapping should have current working directory forlocalRootand.forremoteRoot.ericsnowcurrently commentedon Aug 19, 2019
To verify:
For each of the above, verify that multi-proc debugging works.
ericsnowcurrently commentedon Aug 19, 2019
Don Jayamanne (@DonJayamanne), you suggested that #5852 had been reverted, but I don't see that anywhere.
ericsnowcurrently commentedon Aug 27, 2019
merged: #7024
kimadeline commentedon Aug 27, 2019
✅ Validated