J'essaie de dubug à distance python dans VSC:
C'est le fichier main.py:
print('Hello, World')
debug.py:
import ptvsd
ptvsd.enable_attach('my_secret', address=('0.0.0.0', 7102))
ptvsd.wait_for_attach()
Dockerfile:
FROM python:3.6-slim
EXPOSE 7102
RUN pip install ptvsd
WORKDIR /app
COPY . .
CMD ["python", "debug.py"]
et c'est le fichier launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach (Remote Debug)",
"type": "python",
"request": "attach",
"localRoot": "${workspaceRoot}",
"remoteRoot": "/app",
"port": 7102,
"secret": "my_secret",
"Host": "172.17.0.3"
}
]
}
C'est une commande pour construire et démarrer un conteneur:
docker build -t python-for-debug.
docker run -it -p 7102: 7102 python-pour-débogage
Lorsque j'exécute le débogueur, j'obtiens: écran du code vs
Aucune erreur sur la console de débogage, pas de sortie, pas de problèmes. Aucune sortie pour l'exécution du conteneur. Aucun journal de docker
Version VS Code: 1.15.0 Docker version 17.06.0-ce, build 02c1d87
Salut, vous devez utiliser ptvsd 3, alors changez la ligne RUN dans Dockerfile en:
RUN pip3 install ptvsd==3.0.0
exécutez également l'installation locale de ptvsd:
$pip3 install ptvsd==3.0.0
pour plus d'informations, rendez-vous sur https://code.visualstudio.com/docs/python/debugging#_remote-debugging cela a fonctionné pour moi, j'espère que cela aide.
Modifier le 12 août
J'ai configuré une version de test pour voir ce qui pourrait mal se passer. Le problème est que le code Visual Studio n'établit pas de connexions au débogueur qu'il a échoué avant de se connecter uniquement
Voir l'exception est dans leur code JS.
Il y a aussi un problème ouvert sur Github
https://github.com/DonJayamanne/pythonVSCode/issues/805
Le mieux est d'ajouter ces détails au problème ou d'en ouvrir un nouveau
Réponse originale:
Le comportement que vous voyez est en fait correct. J'ai vu votre capture d'écran et vous aviez imprimé "Hello World" dans votre script client et le code ci-dessous est votre télécommande
import ptvsd
ptvsd.enable_attach('my_secret', address=('0.0.0.0', 7102))
ptvsd.wait_for_attach()
Si vous voyez l'URL ci-dessous
https://donjayamanne.github.io/pythonVSCodeDocs/docs/debugging_remote-debugging/
Lisez la citation ci-dessous
Effectuez la modification ci-dessus dans les deux fichiers de script (c'est-à-dire les scripts sur les machines locales et distantes) Cependant, côté client, assurez-vous que les deux lignes ci-dessus sont mises en commentaire, c'est-à-dire cela est nécessaire pour garantir que nous avons les mêmes numéros de ligne sur le serveur et qu'ils correspondent.
L'exécution du débogage de code se produit à l'intérieur de votre conteneur. Bien que votre code sur la machine locale soit plus pour pouvoir visualiser quelle est la ligne du code à l'intérieur du conteneur
Je pense que le problème est que votre processus de docker se termine.
Vous démarrez votre debug.py en tant que commande dans le Dockerfile. Docker démarre donc la tâche, attend que votre débogueur se connecte puis se ferme car il n'y a plus rien à faire.
Il semble que vous deviez placer votre code dans debug.py comme le plus simple. Et n'oubliez pas que vous ne pouvez pas placer le point d'arrêt juste après
ptvsd.wait_for_attach()
donc vous feriez mieux d'écrire quelques lignes de rechange entre.
J'espère que cela t'aides.