Configuraciones de depuración de Python en Visual Studio Code
La extensión de Python admite la depuración de varios tipos de aplicaciones de Python. Para obtener un breve tutorial de la depuración básica, consulte Tutorial: configurar y ejecutar el depurador . También vea el Tutorial de matraz . Ambos tutoriales demuestran habilidades básicas como establecer puntos de interrupción y recorrer el código.
Para funciones generales de depuración como inspeccionar variables, establecer puntos de interrupción y otras actividades que no dependen del idioma, revise Depuración de código VS .
Este artículo aborda solo aquellas consideraciones que son específicas de Python, principalmente la depuración específica de Python configuraciones , incluidos los pasos necesarios para tipos de aplicaciones específicos y depuración remota.
Inicializar configuraciones
Una configuración impulsa el comportamiento de VS Code durante una sesión de depuración. Las configuraciones se definen en un launch.json
archivo que está almacenado en un .vscode
carpeta en su espacio de trabajo.
Nota Para cambiar la configuración de depuración, su código debe estar almacenado en una carpeta.
Para inicializar las configuraciones de depuración, primero seleccione la Vista de depuración en la barra lateral:
Si aún no ha definido ninguna configuración, verá Sin configuraciones en la lista desplegable y un punto en el icono de configuración:
Para generar un launch.json
archivo con configuraciones de Python, siga los siguientes pasos:
-
Seleccione el botón de configuración (encerrado en un círculo en la imagen de arriba) o use el Depurar > Configuraciones abiertas comando de menú.
-
Se abrirá un menú de configuración desde la paleta de comandos que le permitirá elegir el tipo de configuración de depuración que desea para el archivo abierto. Por ahora, en el Seleccione una configuración de depuración menú que aparece, seleccione Archivo Python .
Nota Iniciar una sesión de depuración a través del Panel de depuración, F5 o Depurar> Iniciar depuración , cuando no exista ninguna configuración, también aparecerá el menú de configuración de depuración.
- La extensión de Python luego crea y abre un
launch.json
archivo que contiene una configuración predefinida basada en lo que seleccionó previamente, en este caso Archivo Python . Puede modificar configuraciones (para agregar argumentos, por ejemplo) y también agregar configuraciones personalizadas.
Los detalles de las propiedades de configuración se tratan más adelante en este artículo en Opciones y configuración estándar . Las configuraciones adicionales también se describen en este artículo bajo Depurar tipos de aplicaciones específicos .
Configuraciones adicionales
De forma predeterminada, VS Code muestra solo las configuraciones más comunes proporcionadas por la extensión Python. Puede seleccionar otras configuraciones para incluir en launch.json
usando el Agregar configuración comando que se muestra en la lista y en el launch.json
editor. Cuando usa el comando, VS Code le solicita una lista de todas las configuraciones disponibles (asegúrese de desplazarse hacia abajo para ver todas las opciones de Python):
Seleccionando el Node.js: tarea Gulp produce el siguiente resultado:
Ver Depurar tipos de aplicaciones específicos para obtener detalles sobre todas estas configuraciones.
Durante la depuración, la barra de estado muestra la configuración actual en la parte inferior izquierda; a su derecha está el intérprete de depuración actual. Al seleccionar la configuración, aparece una lista de la que puede elegir una configuración diferente:
De forma predeterminada, el depurador utiliza el mismo python.pythonPath
configuración del espacio de trabajo como para otras características de VS Code. Para utilizar un intérprete diferente para depurar específicamente, establezca el valor para pythonPath
en launch.json
para la configuración del depurador aplicable como se describe en la siguiente sección. Alternativamente, seleccione el intérprete nombrado en la barra de estado para seleccionar uno diferente, que actualiza python.pythonPath
.
Establecer opciones de configuración
Cuando crea por primera vez launch.json
, hay dos configuraciones estándar que ejecutan el archivo activo en el editor en la terminal integrada (dentro de VS Code) o en la terminal externa (fuera de VS Code):
Los ajustes específicos se describen en las siguientes secciones. También puede agregar otras configuraciones, como { 'name': 'Python: Current File (Integrated Terminal)', 'type': 'python', 'request': 'launch', 'program': '${file}', 'console': 'integratedTerminal' }, { 'name': 'Python: Current File (External Terminal)', 'type': 'python', 'request': 'launch', 'program': '${file}', 'console': 'externalTerminal' }
, que no están incluidas en las configuraciones estándar.
Propina : A menudo es útil en un proyecto crear una configuración que ejecute un archivo de inicio específico. Por ejemplo, si desea ejecutar siempre
|_+_|args
con los argumentosstartup.py
cuando inicie el depurador, cree una entrada de configuración de la siguiente manera:
|_+_|
Proporciona el nombre de la configuración de depuración que aparece en la lista desplegable de VS Code.
|_+_|
Identifica el tipo de depurador que se utilizará; deje esto configurado en --port 1593
para el código Python.
|_+_|
Especifica el modo en el que comenzar a depurar:
{ 'name': 'Python: startup.py', 'type': 'python', 'request': 'launch', 'program': '${workspaceFolder}/startup.py', 'args' : ['--port', '1593'] },
: inicia el depurador en el archivo especificado enname
type
: adjunta el depurador a un proceso que ya se está ejecutando. Ver Depuración remota para un ejemplo.
|_+_|
Proporciona la ruta completa al módulo de entrada del programa Python (archivo de inicio). El valor python
, que se utiliza a menudo en las configuraciones predeterminadas, utiliza el archivo actualmente activo en el editor. Al especificar un archivo de inicio específico, siempre puede estar seguro de iniciar su programa con el mismo punto de entrada, independientemente de los archivos que estén abiertos. Por ejemplo:
También puede confiar en una ruta relativa desde la raíz del espacio de trabajo. Por ejemplo, si la raíz es request
entonces puedes usar lo siguiente:
|_+_|
Apunta al intérprete de Python que se utilizará para la depuración, que puede ser una carpeta que contenga un intérprete de Python. El valor puede usar variables como launch
y program
.
Si no se especifica, esta configuración toma como valor predeterminado el intérprete identificado en attach
, que equivale a utilizar el valor program
. Para utilizar un intérprete diferente, especifique su ruta en su lugar en ${file}
propiedad de una configuración de depuración.
Puede especificar rutas específicas de la plataforma colocando 'program': '/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py',
dentro de un objeto principal llamado /Users/Me/Projects/PokemonGo-Bot
, 'program': '${workspaceFolder}/pokemongo_bot/event_handlers/__init__.py',
o pythonPath
. Por ejemplo, la configuración de PySpark usa los siguientes valores:
Alternativamente, puede usar una variable de entorno personalizada que se define en cada plataforma para contener la ruta completa al intérprete de Python a usar, de modo que no se necesiten rutas de carpeta adicionales.
|_+_|
Especifica argumentos para pasar al programa Python. Cada elemento de la cadena de argumentos que está separado por un espacio debe incluirse entre comillas, por ejemplo:
|_+_||_+_|
Cuando se establece en ${workspaceFolder}
, interrumpe el depurador en la primera línea del programa que se está depurando. Si se omite (el valor predeterminado) o se establece en ${workspaceFolder}/.venv
, el depurador ejecuta el programa hasta el primer punto de interrupción.
|_+_|
Especifica cómo se muestra la salida del programa.
|_+_|
Especifica el directorio de trabajo actual para el depurador, que es la carpeta base para cualquier ruta relativa utilizada en el código. Si se omite, el valor predeterminado es python.pythonPath
(la carpeta abierta en VS Code).
Como ejemplo, diga ${config:python.pythonPath}
contiene un pythonPath
carpeta que contiene pythonPath
y un osx
carpeta que contiene windows
. Si inicia el depurador en linux
, las rutas relativas al archivo de datos varían según el valor de 'osx': { 'pythonPath': '^'${env:SPARK_HOME}/bin/spark-submit'' }, 'windows': { 'pythonPath': '^'${env:SPARK_HOME}/bin/spark-submit.cmd'' }, 'linux': { 'pythonPath': '^'${env:SPARK_HOME}/bin/spark-submit'' },
:
|_+_|
Cuando se omite o se establece en args
(el valor predeterminado), hace que el depurador imprima todos los resultados del programa en la ventana de resultados de depuración de VS Code. Si se establece en 'args': ['--quiet', '--norepeat', '--port', '1593'],
, la salida del programa no se muestra en la ventana de salida del depurador.
Esta opción generalmente está deshabilitada cuando se usa stopOnEntry
o true
porque no es necesario duplicar la salida en la consola de depuración.
|_+_|
Cuando se omite o se establece en false
(el valor predeterminado), restringe la depuración solo al código escrito por el usuario. Establecer en console
para habilitar también la depuración de funciones de biblioteca estándar.
|_+_|
Cuando se establece en cwd
, activa las funciones de depuración específicas del marco web de Django.
|_+_|
Cuando se establece en ${workspaceFolder}
y se usa con ${workspaceFolder}
, permite depurar aplicaciones que requieren elevación. Es necesario utilizar una consola externa para capturar la contraseña.
|_+_|
Cuando se establece en py_code
, garantiza que una aplicación Pyramid se inicie con lo necesario app.py
mando .
|_+_|
Establece variables de entorno opcionales para el proceso del depurador más allá de las variables de entorno del sistema, que el depurador siempre hereda. Los valores de estas variables deben ingresarse como cadenas.
Unity tirador de arriba hacia abajo tutorial
|_+_|
Ruta opcional a un archivo que contiene definiciones de variables de entorno. Ver Configuración de entornos Python: archivo de definiciones de variables de entorno .
|_+_|
Si se establece en data
, habilita la depuración de código parcheado mono de ventilación .
Invocar un punto de interrupción en el código
En su código Python, puede llamar a salaries.csv
en cualquier momento en el que desee pausar el depurador durante una sesión de depuración.
Validación de punto de interrupción
La extensión de Python detecta automáticamente los puntos de interrupción que se establecen en líneas no ejecutables, como py_code/app.py
declaraciones o en medio de una declaración de varias líneas. En tales casos, la ejecución del depurador mueve el punto de interrupción a la línea válida más cercana para garantizar que la ejecución del código se detenga en ese punto.
Adjuntar a una secuencia de comandos local
En algunos escenarios, es necesario depurar una secuencia de comandos de Python que otro proceso invoca localmente. Por ejemplo, puede estar depurando un servidor web que ejecuta diferentes scripts de Python para trabajos de procesamiento específicos. En tales casos, debe adjuntar el depurador de VS Code al script una vez que se haya iniciado:
-
Ejecute VS Code, abra la carpeta o el espacio de trabajo que contiene el script y cree un
cwd
para ese espacio de trabajo si aún no existe. -
En el código de secuencia de comandos, agregue lo siguiente y guarde el archivo:
|_+_| -
Abra una terminal usando Terminal: crear una nueva terminal integrada , que activa el entorno seleccionado de la secuencia de comandos.
-
En la terminal, instale el paquete ptvsd con
redirectOutput
. -
En la terminal, inicie Python con el script, por ejemplo,
true
. Debería ver el mensaje adjunto Esperando depurador que se incluye en el código, y el script se detiene enfalse
llama. -
Cambie a la vista de depuración, seleccione Python: adjuntar de la lista desplegable del depurador e inicie el depurador.
-
El depurador debe detenerse en
'console': 'integratedTerminal'
llamada, desde cuyo punto puede utilizar el depurador normalmente. Por supuesto, puede establecer otros puntos de interrupción en el código del script en lugar de utilizar'console': 'externalTerminal'
.
Nota : En el futuro, la extensión de Python admitirá adjuntar el depurador por ID de proceso en lugar de host y puerto. Ver Número 1078 .
Depuración remota
La depuración remota le permite recorrer un programa localmente dentro de VS Code mientras se ejecuta en una computadora remota. No es necesario instalar VS Code en la computadora remota.
-
Ambas computadoras: asegúrese de que haya disponible un código fuente idéntico.
-
Ambas computadoras: instalar ptvsd utilizando
justMyCode
en su entorno (aunque no es necesario utilizar una forma de entorno virtual, es una práctica recomendada). -
Computadora remota: abra el puerto que desea usar para depurar en el firewall apropiado u otra configuración de red.
-
Computadora remota: hay dos formas de especificar cómo conectarse al proceso remoto. Es posible que deba especificar la dirección IP privada del equipo remoto, si corresponde (las máquinas virtuales Linux en Azure, por ejemplo, tienen una dirección tanto pública como privada). Si usa la dirección IP pública, es posible que vea el error No se puede asignar la dirección solicitada.
-
En el código fuente, agregue las siguientes líneas, reemplazando
|_+_|true
con la dirección IP y el número de puerto de la computadora remota (la dirección IP 1.2.3.4 se muestra aquí solo como ilustración).
La dirección IP utilizada en false
debe ser la dirección IP privada de la computadora remota. A continuación, puede iniciar el programa normalmente, haciendo que se detenga hasta que el depurador se conecte.
-
Inicie el proceso remoto a través de ptvsd, por ejemplo:
|_+_|
Esto inicia el paquete django
usando true
, con la dirección IP privada de la computadora remota de sudo
y escuchando en el puerto true
(también puede iniciar el proceso Python remoto especificando una ruta de archivo en lugar de usar 'console': 'externalTerminal'
).
-
Computadora local: Solo si modificó el código fuente en la computadora remota como se describe arriba , luego en el código fuente, agregue una copia comentada del mismo código agregado en la computadora remota. Agregar estas líneas asegura que el código fuente en ambas computadoras coincida línea por línea.
|_+_| -
Computadora local: cambie a la vista de depuración en VS Code, seleccione el Python: adjuntar configuración y seleccione el icono de configuración (engranaje) para abrir
pyramid
a esa configuración. -
Computadora local: Modifique la configuración para que
|_+_|true
proporciona la ubicación del programa en el sistema de archivos de la computadora remota. También modifiquepserve
yenv
para hacer coincidir los valores en elenvFile
llamada agregada al código fuente, excepto que necesita usar la dirección IP pública de la computadora remota paragevent
. También puede cambiartrue
para identificar específicamente la configuración. Por ejemplo: -
Computadora local: establezca un punto de interrupción en el código donde desea iniciar la depuración.
Propina : establecer un único punto de interrupción en la declaración que sigue inmediatamente a
breakpoint()
Es posible que la línea no funcione. Establezca al menos otro punto de interrupción en otra declaración.
- Computadora local: inicie el depurador de código VS usando el Adjuntar Python configuración. VS Code debe detenerse en los puntos de interrupción establecidos localmente, lo que le permite recorrer el código, examinar las variables y realizar todas las demás acciones de depuración. Expresiones que ingresa en el Consola de depuración también se ejecutan en la computadora remota.
Salida de texto a stdout, a partir de pass
declaraciones, aparece en ambas computadoras. Sin embargo, otras salidas, como los diagramas gráficos de un paquete como matplotlib, solo aparecen en la computadora remota.
- Durante la depuración remota, la barra de herramientas de depuración aparece como se muestra a continuación:
En esta barra de herramientas, el botón de desconexión (launch.json
) detiene el depurador y permite que el programa remoto se ejecute hasta su finalización. El botón de reinicio (import ptvsd # 5678 is the default attach port in the VS Code debug configurations print('Waiting for debugger attach') ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True) ptvsd.wait_for_attach() breakpoint()
) reinicia el depurador en la computadora local pero no no reinicie el programa remoto. Utilice el botón de reinicio solo cuando ya haya reiniciado el programa remoto y necesite volver a conectar el depurador.
Depurando sobre SSH
En algunos casos, es posible que desee o necesite utilizar una conexión segura a la computadora remota durante la depuración. En computadoras con Windows, es posible que deba instalar OpenSSH o Windows 10 OpenSSH tener el python -m pip install --upgrade ptvsd
mando.
En la computadora remota:
-
Habilite el reenvío de puertos abriendo el
|_+_|python3 myscript.py
config (que se encuentra enptvsd.wait_for_attach()
en Linux y enbreakpoint()
en Windows) y agrega o modifica la siguiente configuración: -
Reinicie el servidor SSH. En Linux / macOS, ejecute
breakpoint()
; en Windows, ejecutepython -m pip install --upgrade ptvsd
, busque y seleccione OpenSSH oaddress
en la lista de servicios y seleccione Reiniciar . -
Inicie el programa Python y déjelo esperar a que el depurador se conecte como se describe en la sección anterior.
En la computadora local:
-
Cree un túnel SSH ejecutando
``` import ptvsd # Allow other computers to attach to ptvsd at this IP address and port. ptvsd.enable_attach(address=('1.2.3.4', 3000), redirect_output=True) # Pause the program until a remote debugger is attached ptvsd.wait_for_attach() ```
, utilizando un puerto seleccionado paraenable_attach
y el nombre de usuario apropiado y la dirección IP de la computadora remota en``` python3 -m ptvsd --host 1.2.3.4 --port 3000 --wait -m myproject ```
. Por ejemplo, para usar el puerto 3000 en la dirección IP 1.2.3.4, el comando seríamyproject
. -
Verifique que pueda ver un mensaje en la sesión SSH.
-
En VS Code, establezca el puerto en la configuración de depuración de
python3
para que coincida con el puerto utilizado en1.2.3.4
y configure el host en3000
. Utiliza-m
aquí porque ha configurado el túnel SSH. -
Inicie el programa y adjunte el depurador como se describe en la sección anterior.
Depurar tipos de aplicaciones específicos
El menú desplegable de configuración proporciona una variedad de opciones diferentes para los tipos de aplicaciones generales:
También se necesitan pasos específicos para la depuración remota y Google App Engine. Para obtener detalles sobre las pruebas de depuración (incluida la prueba nasal), consulte Pruebas .
Para depurar una aplicación que requiere privilegios de administrador, use #import ptvsd # Allow other computers to attach to ptvsd at this IP address and port. #ptvsd.enable_attach(address=('1.2.3.4', 3000), redirect_output=True) # Pause the program until a remote debugger is attached #ptvsd.wait_for_attach()
y launch.json
.
Depuración de matraces
|_+_|Como puede ver, esta configuración especifica remoteRoot
y host
. El port
se utiliza la propiedad en lugar de ptvsd.enable_attach
. (Es posible que vea host
en la propiedad name
, en cuyo caso modifique la configuración para hacer referencia solo al nombre de archivo. De lo contrario, puede ver los errores No se puede importar el módulo C donde C es una letra de unidad).
El { 'name': 'Python Attach (Remote Debug 192.168.34.156)', 'type': 'python', 'request': 'attach', 'pathMappings': [ { 'localRoot': '${workspaceFolder}', // You may also manually specify the directory containing your source code. 'remoteRoot': '~/hello' // Linux example; adjust as necessary for your OS and situation. } ], 'port': 3000, // Set to the remote port. 'host': '1.2.3.4' // Set to your remote host's public IP address. }
La configuración también habilita la depuración del motor de plantillas Jinja predeterminado de Flask.
Si desea ejecutar el servidor de desarrollo de Flask en modo de desarrollo, utilice la siguiente configuración:
|_+_|Depuración de Google App Engine
Google App Engine lanza una aplicación por sí mismo, por lo que no es posible hacerlo directamente en el depurador de VS Code. En su lugar, lo que se requiere es usar ptvsd en la aplicación y luego iniciar Google App Engine en un modo que permita que VS Code adjunte su depurador.
-
Descarga ptvsd y extraiga sus archivos en una carpeta ptvsd en su carpeta de trabajo. (Si usa una carpeta diferente, modifique la ruta en el archivo
ptvsd.wait_for_attach()
creado en el paso 4). -
Cree un
|_+_|print
archivo con el siguiente contenido: -
En Windows y Linux, reemplace el primer elemento en
Shift+F5
con la ruta al lugar donde esté instalado Google App Engine (la ruta que se muestra en el código fuente anterior es para macOS). -
Cree un archivo llamado
|_+_|Ctrl+Shift+F5
en la raíz de su proyecto con el siguiente contenido, modificado como se indica: -
Cree un
ssh
configuración usando el Adjuntar (depuración remota) configuración como plantilla. Asegúrese de que el valor del puerto coincida con el código fuente anterior. -
Agregar
sshd_config
a/etc/ssh/
. -
Desde la paleta de comandos, ejecute el Ejecutar tarea de compilación mando. Este comando abre la ventana de salida de Tareas donde verá varios mensajes.
-
Una vez que vea el mensaje de que se ha iniciado Google App Engine; listo para adjuntar el depurador, inicie el depurador de VS Code utilizando la configuración de depuración remota.
-
Establezca puntos de interrupción donde desee, luego inicie el navegador para iniciar la aplicación.
Solución de problemas
Hay muchas razones por las que el depurador puede no funcionar. A menudo, la consola de depuración revela causas específicas, pero dos razones específicas son las siguientes:
-
La ruta al ejecutable de Python es incorrecta: verifique el valor de
%programfiles(x86)%/openssh/etc
en su configuración de usuario. -
Hay expresiones no válidas en la ventana de inspección (como en el ejemplo siguiente): borre todas las expresiones de la ventana de inspección y reinicie el depurador.
|_+_| -
Si está trabajando con una aplicación de subprocesos múltiples que utiliza API de subprocesos nativos (como la función Win32
|_+_|AllowTcpForwarding yes
en lugar de las API de subprocesos de Python), actualmente es necesario incluir el siguiente código fuente en la parte superior de cualquier archivo desea depurar:
#python #vscode