web-dev-qa-db-fra.com

Code Visual Studio - comment déboguer à distance python dans un conteneur Docker

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

12
user7316356

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.

5
Marcelo Rossi

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.

Visual Studio Error Log

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

2
Tarun Lalwani

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.

0
mgremlin